Source mit MultiTriggers
-
06-07-2019 - |
Frage
Ist es möglich, eine MultiTrigger
zu verwenden, um Eigenschaften auf mehrere Elemente zu bewerten? Das nicht innerhalb einer Vorlage befindet, ist aber im Usercontrol / Fenster.
Beispiel:
<CheckBox x:Name="checkBox1" />
<CheckBox x:Name="checkBox2" />
<CustomControl>
<CustomControl.ContentTemplate>
<DataTemplate>
<DataTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
SourceName="checkBox1"
Property="IsChecked"
Value="False" />
<Condition
SourceName="checkBox2"
Property="IsChecked"
Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter
Property="Visibility"
Value="Collapsed" />
</MultiTrigger.Setters>
</MultiTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</CustomControl.ContentTemplate>
In einem normalen Trigger
können wir die Quellname verwenden gegen Eigenschaften auf eine dieser beiden Kontrollkästchen Kontrollen auszulösen, aber mit einem MultiTrigger
ich Fehler bekommen zu bauen, wenn es versucht, diese Kontrollen zu finden.
Hinweis: Der Grund, warum ich ein DataTemplate
bin mit zu einem Style
Gegensatz erwähnt hier
Lösung
Sie können in der Tat Quellennamen verwenden, aber Ihr Datatemplate scheint nicht richtig definiert werden. Ich habe versucht, Ihr Beispiel ausfüllen, das scheint zu funktionieren:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Grid>
<Grid.Resources>
<DataTemplate DataType="{x:Type sys:String}">
<StackPanel>
<TextBlock x:Name="textBlock" Text="{Binding}"></TextBlock>
<CheckBox x:Name="checkBox1" />
<CheckBox x:Name="checkBox2" />
</StackPanel>
<DataTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition
SourceName="checkBox1"
Property="IsChecked"
Value="False" />
<Condition
SourceName="checkBox2"
Property="IsChecked"
Value="True" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter
TargetName="textBlock"
Property="Visibility"
Value="Collapsed" />
</MultiTrigger.Setters>
</MultiTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Grid.Resources>
<ContentControl>
<sys:String>Foo</sys:String>
</ContentControl>
</Grid>
</Page>
Das Problem scheint zu sein, dass Sie nicht definieren Ihre Checkboxes innerhalb Ihr Datatemplate, das ist, wo sie sein müssen.