【问题标题】:How to compare 2 string using data triggers in wpf如何使用 wpf 中的数据触发器比较 2 个字符串
【发布时间】:2015-11-02 06:39:26
【问题描述】:

我有一个名为 Name1 和 Name2 的两个属性。

如何检查这两个属性是否具有相同的值,即不使用 XAML 中的数据触发器。

Name1 属性在 Class1 中,Name2 属性在 Class2 中。

要详细一点,

  1. 我有一个名为 Pages 的类,它具有属性 Name1。在应用程序加载时,我将创建一个 List 对象并向该列表添加一些值。 在 XAML 中,我会将其绑定到 ItemSource。

  2. 我还有一个名为 CurrentPage 的类,它再次具有名为 Name2 的属性。

  3. 在 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>
    

  4. 如果标签的背景颜色等于当前页面内容,我正在尝试更改它。

但是我收到错误并且样式没有加载。我知道我在比较 Name2 和 Name1..() 的部分是错误的 请任何人帮助我

【问题讨论】:

    标签: wpf xaml datatrigger multidatatrigger


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

      在我看来这是业务逻辑,在这种情况下,这应该在 Model 中处理:

      public bool AreTheSame
      {
          get { return Name1 == Name2; }
      }
      

      然后您可以在DataTrigger 中绑定到AreTheSame

      【讨论】:

        【解决方案3】:
        <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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多