我有两个名为Name1和Name2的属性。
如何检查这两个属性是否具有在XAML中不使用数据触发器的相同值。
Name1属性在Class1中,Name2属性在Class2中。
更详细,
我有一个名为Pages的类,它具有属性Name1。在加载应用程序时,我将创建一个List对象并向该列表添加一些值。 在XAML中,我将它绑定到ItemSource。
我有另一个名为CurrentPage的类,它又具有名为Name2的属性。
在ItemSource.ItemTemplate中,我添加了一个标签控件来显示所有Pages的名称。
<ItemsControl ItemsSource="{Binding Pages}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,2,0,2"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Name1}" FontSize="15" FontFamily="Arial" FontWeight="DemiBold">
<Label.Style>
<Style TargetType="Label">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Border Name="Border" HorizontalAlignment="Center" BorderBrush="Black" BorderThickness="1" CornerRadius="0,20,20,0" Width="100">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding CurrentPage.Name2}" Value="Name1">
<Setter Property="Background" TargetName="Border" Value="Yellow"></Setter>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Label.Style>
</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
我正在尝试更改标签的BG颜色,如果它等于当前页面内容。
但是我收到错误并且样式没有加载。我知道在比较Name2和Name1时我错了。() 请任何人帮助我
答案 0 :(得分:1)
或者,您可以使用转换器在属性Name1和Name2中使用多重绑定来比较值:
class StringMatchConverter : IMultiValueConverter
{
public object Convert(object [] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if(values.Length < 2)
{
return false;
}
for (int i = 1; i < values.Length; i++)
{
if (!(values[0] as string).Equals(values[i] as string))
{
return false;
}
}
return true;
}
public object[] ConvertBack(object value, Type[] targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
然后你可以写下这些内容:
<MultiBinding Converter="{StaticResource StringMatchConverter}">
<Binding Path="Name1"/>
<Binding XPath="Name2" />
</MultiBinding>
答案 1 :(得分:0)
听起来像这是业务逻辑,在这种情况下,这应该在模型中处理:
public bool AreTheSame
{
get { return Name1 == Name2; }
}
然后,您可以绑定到AreTheSame
中的DataTrigger
。
答案 2 :(得分:0)
<Label.Style>
<Style TargetType="Label">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Border Name="Border" HorizontalAlignment="Center" BorderBrush="Black" BorderThickness="1" CornerRadius="0,20,20,0" Width="150">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
</Border>
<ControlTemplate.Triggers>
<DataTrigger>
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource StringMatchConverter}">
<Binding Path= "CurrentPage.Name2"/>
<Binding Path="Name1" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" TargetName="Border" Value="Yellow"></Setter>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Label.Style>