私は次のXMLを持っています:
<Items>
<Item>
<Name>Item One</Name>
<MyValue>42</MyValue>
</Item>
</Items>
およびXAML:
<DockPanel>
<DockPanel.Resources>
<XmlDataProvider x:Key="ItemsXml" XPath="Items/Item"
Source="Resources/Items.xml"/>
</DockPanel.Resources>
<ListBox
ItemsSource="{Binding Source={StaticResource ItemsXml}}"
DisplayMemberPath="Name" Name="itemList"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.Resources>
<Style x:Key="ValueFormat" TargetType="Label">
<Setter Property="ContentStringFormat" Value="{}/{0,3}"/>
</Style>
</Grid.Resources>
<Image Source="Icons/ConditionFalse.png" Grid.Column="0"/>
<TextBox Name="myTextBox" VerticalAlignment="Center" Grid.Column="1"/>
<Label
Name="myLabel"
DataContext="{Binding SelectedItem, ElementName=itemList}"
Style="{StaticResource ValueFormat}"
VerticalAlignment="Center"
Content="{Binding XPath=MyValue}"
Grid.Column="2"/>
</Grid>
</DockPanel>
*の基準値と等しいImage.Source
条件に依存させたい。参照値はXMLファイルへのバインドであるため、比較の基礎としてそれを使用することも問題ありません。にはまだ存在しないプロパティへのバインディングがあるため、オプションとして使用できます。TextBox.Text
Label
TextBox
*Label
現在ContentStringFormat
、その値を変更するために使用しています。これに問題がある場合は、取り除くことができます。
この状態を表すプロパティに直接バインドするためにaDataTrigger
を使用できますが、それはハックのように感じられるので、避けたいと思います。以下に示すようにを設定しようとしましたが、最初に(に対しては機能しました)MultiDataTrigger
の条件を機能させることができませんでした。次に、私の場合、定数値は適切ではありません。また、条件がfalseと評価された場合の「else」句またはデフォルト値はありませんが、最初にチェックを行うことができれば、問題がないことを期待しています。Label
TextBox
<Image Grid.Column="0">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Value="/ 42"
Binding="{Binding Text, ElementName=myTextBox}"/>
<Condition Value="/ 42"
Binding="{Binding Content, ElementName=myLabel}"/>
</MultiDataTrigger.Conditions>
<Setter Property="Source" Value="Icons/ConditionTrue.png"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>