0

Name1 と Name2 という 2 つのプロパティがあります。

この 2 つのプロパティが XAML でデータ トリガーを使用していないという同じ値を持っているかどうかを確認するにはどうすればよいですか。

Name1 プロパティは Class1 にあり、Name2 プロパティは Class2 にあります。

詳しくは、

  1. プロパティName1を持つPagesというクラスがあります。アプリケーションの読み込み中に、List オブジェクトを作成し、そのリストにいくつかの値を追加します。XAML では、ItemSource にバインドします。

  2. Name2 というプロパティを持つ CurrentPage という別のクラスがあります。

  3. ItemSource.ItemTemplate に、すべてのページの名前を表示するラベル コントロールを追加しました。

    <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. 現在のページ コンテンツと等しい場合、ラベルの BG 色を変更しようとしています。

しかし、エラーが発生し、スタイルが読み込まれません。Name2とName1を比較する部分で間違っていたことは知っています..()親切に誰か助けてください

4

3 に答える 3

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>
于 2015-08-10T16:01:13.510 に答える
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>
于 2015-08-11T06:29:25.057 に答える