2010-09-24 10 views
14

Ho un usercontrol di accesso personalizzato con una normale casella di testo e una passwordbox.Come eseguire il debug degli errori DependencyProperty.Unsetvalue quando InnerException è nullo

Miscela rifiuta di collaborare con PasswordBox dicendo che "DP.UnsetValue" non è valido per la proprietà PasswordChar. Tuttavia, il progetto viene compilato e funziona bene in Blend o in VS2010. Il progettista di sidro in VS2010 non sembra preoccuparsi dell'errore perché rende effettivamente il mio UserControl per la configurazione del tempo di progettazione.

Normalmente quando ricevo uno di questi errori, c'è una InnerException con un percorso al file/risorsa mancante. Questo non è il caso qui e non sono sicuro di come capire come risolverlo per quando arriverà in futuro.

Ho sostituito i tag per trasformare lo PasswordBox in un normale TextBox e sembra che stia bene. Tuttavia ho bisogno del mascheramento di input fornito da PasswordBox. Non è molto pratico commentare quell'oggetto e finire lo stile del mio controllo in Blend.

Ecco la mia Xaml:

<PasswordBox x:Name="PasswordTextbox" PasswordChar="*" Height="26" VerticalAlignment="Center" Grid.Column="1" Grid.Row="1" Margin="5" RenderTransformOrigin="0.5,0.5" TabIndex="3"> 
       <PasswordBox.RenderTransform> 
        <TransformGroup> 
         <ScaleTransform/> 
        </TransformGroup> 
       </PasswordBox.RenderTransform> 
       <PasswordBox.Effect> 
        <DropShadowEffect /> 
       </PasswordBox.Effect> 
       <PasswordBox.Triggers> 
        <EventTrigger RoutedEvent="UIElement.GotFocus"> 
         <BeginStoryboard Storyboard="{StaticResource StoryboardScaleUpFontIncrease}"/> 
        </EventTrigger> 
        <EventTrigger RoutedEvent="UIElement.LostFocus"> 
         <BeginStoryboard Storyboard="{DynamicResource StoryboardScaleNormalFontNormal}"/> 
        </EventTrigger> 
       </PasswordBox.Triggers> 
      </PasswordBox> 

Qualcuno sa come eseguire il debug questo comportamento?

risposta

3

Volevo solo aggiungere che questo è stato utile a risolvere un problema per ottenere un "DependencyProperty.UnsetValue non è un valore valido per la proprietà "errore risolto, in particolare la prima parte del blog che suggerisce che la tua risorsa potrebbe non essere valida (cioè definita in precedenza e disponibile per l'uso). Risulta che nel mio caso era il classico problema di non definire le mie risorse nel giusto ambito e prima del in cui sono effettivamente chiamate.

Il mio consiglio: per prima cosa assicurati di definire StaticResource nella sezione Element.Resources appropriata. Assicurarsi che la definizione sia fisicamente posizionata prima della chiamata effettiva alla risorsa.

+1

Ho sicuramente combattuto anche questo problema, ora ho lo scopo più ristretto possibile durante lo sviluppo e il test e lentamente trasferisco le cose ai dizionari una volta provati. Ciò mi ha portato a ridurre questi errori , ma ci vuole più tempo per mantenere. – TWood

9

Ho avuto lo stesso problema anche in xaml designer, ma in modo visivamente diverso. Aggiungo il dettaglio qui nel caso in cui sia utile a qualcuno.

Stavo usando un controllo di terze parti che ha il proprio tema definito in una DLL. Ho fatto riferimento a questa dll e uso 'StaticResource' per fare riferimento ad alcune risorse definite in quella DLL. Quindi il designer xaml ha sottolineato il mio codice xaml dicendo qualcosa come "D.Unset non è un valore valido per xxx". Ma il programma viene compilato ed eseguito senza alcun problema.

Per eliminare questa fastidiosa sottolineatura, la soluzione è semplice: Modificare 'StaticResource' in 'DynamicResource'. Un altro modo più complicato è utilizzare "ResourceDictionary.MergedDictionaries" per includere le risorse in tale dll nel file xaml.

+1

ho avuto simile questo errore in un'applicazione PRISM per il modello di errore. Solo cambiando StaticResource alla dinamica risolto il mio problema. – isakavis

+1

Nota che le risorse statiche sono cambiati tempo di compilazione, e le risorse dinamiche sono impostati runtime, per cui v'è un leggero impatto sulle prestazioni – Luuk

+2

Siamo spiacenti di riaprire questo post, ma il tuo commento 'un altro modo più complicato è quello di utilizzare 'ResourceDictionary.MergedDictionaries'' è imprecisa non è complicato a tutti -. e' solo una singola linea e basta a comprendere la sintassi specifica per specificare un file che risiede in una DLL (ovvero una risorsa). Inoltre, 'D ynamicResource' specifica un uso particolare che è diverso da un 'StaticResource'. Devi capire il costo della prestazione che verrà sostenuto prima di utilizzare liberamente 'DynamicResource' nel tuo progetto. – code4life

0

Consiglio di ricontrollare (due volte o più) il proprio ResourceDictionary. Sono venuto a questo errore dopo ho aggiunto alla mia ResourceDictionary:

<Style TargetType="Label" x:Key="myLabel"> 
    <Setter Property="Foreground" Value="{StaticResource myDefinedColor}"/> 
    ... 
</Style> 

mentre {StaticResource myDefinedColor} è stata definita sotto di essa. Nel mio caso l'errore era relativo a Primo piano con UnsetValue. Quindi in realtà era davvero un valore insoddisfacente ... Ho spostato il mio stile per Label sotto la definizione del mio colore e basta!

Problemi correlati