2009-11-09 10 views
2

Quelqu'un peut-il me dire pourquoi ce qui suit ne fonctionne pas, mais celui qui suit? Notez la valeur Value = syntaxe par rapport à l'utilisation explicite sur ce dernier. Je ne comprends pas la différence.Différence entre valeur attribut et explicite DataTrigger.Value dans ResourceDictionary?

<Style.Triggers> 
    <DataTrigger Binding="{Binding ItemType}" Value="{x:Type log:FranchiseAiring}"> 
     <Setter Property="Template" Value="{StaticResource FranchiseRowStyle}" /> 
    </DataTrigger> 
</Style.Triggers> 

lancers francs Au-dessus d'une exception, les travaux ci-dessous bien:

<Style.Triggers> 
<DataTrigger Binding="{Binding ItemType}"> 
    <DataTrigger.Value> 
     <x:Type Type="{x:Type log:FranchiseAiring}" /> 
    </DataTrigger.Value> 
    <Setter Property="Template" Value="{StaticResource FranchiseRowStyle}" /> 
</DataTrigger> 

Exception: doit spécifier à la fois Reliure et valeur pour DataTrigger. Erreur à l'objet 'System.Windows.DataTrigger' dans le fichier de balisage '; composant/ResourceDictionaries/LogStyles.xaml' Ligne 14 Position 15.

Stack Trace: à System.Windows.Markup.XamlParseException.ThrowException (String message, . exception innerException, Int32 lineNumber, Int32 LinePosition, Uri baseURI,

Répondre

4

il a probablement causé par le bug Anurag lié, mais vous devez savoir que les deux exemples que vous avez utilisés ne sont pas exactement identiques d'un point de vue XAML:

Si vous convertir en syntaxe de propriétés d'élément

Value="{x:Type whatever}" 

ce que vous obtenez est:

<DataTrigger.Value> 
    <x:Type TypeName="whatever"> 
</DataTrigger.Value> 

Qu'est-ce que vous avez écrit dans votre question correspond en fait à

Value="{x:Type Type={x:Type whatever}}" 

En raison de la sémantique de TypeExtension, les deux devraient produire la même valeur dans chaque situation que je peux penser. Mais à d'autres fins, ils peuvent être différents, et ils peuvent chatouiller différents bugs dans WPF. Pour cette raison, il est possible que Value="{x:Type Type={x:Type log:FranchiseAiring}}" puisse fonctionner pour vous. Vous voudrez peut-être essayer et découvrir.

+0

+1. C'est parce que 'Type' est marqué comme une propriété' [ConstructorArgument] '. Mais dans ce cas, le comportement devrait être identique. –

+1

Merci, la valeur = "{x: Type Type = syntaxe a parfaitement fonctionné. – dariusriggins