2

はい、データトリガーはスタイル内にあります。その問題が私たちの背後にあるので、次のコードが機能しない理由を知りたいと思います。データグリッドの背景が青色になっているはずですが、スタイルは無視されます。私は何が間違っているのですか?Window要素に「root」という名前を付けていることに注意してください。

<Window x:Class="DataGridTriggerTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" x:Name="root">
<Grid>
    <DataGrid ItemsSource="{Binding SomeData}" >
        <DataGrid.Style>
            <Style TargetType="DataGrid">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=root, Path=SomeCondition}" Value="true">
                        <Setter Property="Background" Value="Red"></Setter>
                        <Setter Property="RowBackground" Value="Red"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=root, Path=SomeCondtion}" Value="false">
                        <Setter Property="Background" Value="Blue"></Setter>
                        <Setter Property="RowBackground" Value="Blue"></Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Style>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}" Header="Data"></DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</Window>

そしてここにコードがあります:

public partial class MainWindow : Window
{
    public bool SomeCondition { get; set; }
    public List<string> SomeData { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
        SomeData = new List<string> { "hello", "world" };
    }
}
4

2 に答える 2

2

XAMLブール値では大文字と小文字が区別されませんが、Valueプロパティで使用する場合は、「False」と「True」を使用する必要があると思います。

于 2012-11-21T01:09:21.523 に答える
1

いくつかの問題があります。1つ目は、INotifyPropertyChangedインターフェイスを実装してSomeConditionセッタープロパティでPropertyChangedイベントを発生させるか、SomeConditionをDependencyPropertyにする必要があることです。そうしないと、UIはプロパティ値が変更されたことを認識しません。

2つ目は、値がデフォルト値と同じである場合、データトリガーは発生しないと私は信じているということです。したがって、ブール値のデフォルトがfalseであるため、falseトリガーは発生しません。プロパティのデフォルト値と一致するようにデフォルトのスタイル値を設定することが期待されていると思います。この場合はfalseです...次のようになります。

        <Style TargetType="DataGrid">
            <Setter Property="Background" Value="Blue" />
            <Setter Property="RowBackground" Value="Blue" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=root, Path=SomeCondition}" Value="true">
                    <Setter Property="Background" Value="Red"></Setter>
                    <Setter Property="RowBackground" Value="Red"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>

デフォルトは、プロパティがfalseの場合は青で、プロパティがtrueの場合は変更されます。

最後に、SomeDataのリストの代わりにObservableCollectionを使用する必要があります。

于 2012-11-21T04:37:24.490 に答える