我有下面的XML:製作Image.Source取決於文本框的比較和標籤值
<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
取決於TextBox.Text
是條件等於參考值Label
*。引用值是對XML文件的綁定,因此使用它作爲比較的基礎也很好。 TextBox
將綁定到一個尚不存在的屬性,以便作爲選項提供。
* Label
當前使用ContentStringFormat
來更改其值。如果這是有問題的,它可以擺脫。
我可以使用a DataTrigger
直接綁定到代表這種情況的屬性,但感覺像是黑客,我寧願避免這種情況。我試圖設置一個MultiDataTrigger
如下所示,但首先我無法得到Label
的工作條件(它的確適用於TextBox
),其次在我的情況下,常數值不好。當條件評估爲false時,它也沒有「else」子句或默認值,但如果可以首先進行檢查,我希望這將是一個非問題。
<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>
轉換器或MultiValueConverter怎麼樣? – Harry