0

正直なところ、ここでどこが間違っているのかわかりませんが、何らかの理由で、以下に示すフォアグラウンド スタイルがデータグリッドに適用されていません。xamlをデバッグする方法が本当にわからないので、これには途方に暮れています。

<DataGrid Name="dgProperties" Background="#1E918D8D" SelectionMode="Extended" SelectionUnit="FullRow" ItemsSource="{Binding CurFieldData}" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserSortColumns="True" IsReadOnly="True">

    <DataGrid.RowStyle>
        <Style  TargetType="{x:Type DataGridRow}" >
            <Setter Property="Foreground" Value="#3535bb" />

            <!--<Style.Triggers>
                <DataTrigger Binding="{Binding Path=DiffState}" Value="Different">
                    <Setter Property="Foreground" Value="#3535BB" />
                </DataTrigger>
            </Style.Triggers>-->

        </Style>
    </DataGrid.RowStyle>

    <DataGrid.Columns>
        <DataGridTextColumn Header="Property" FontSize="12"  Binding="{Binding Name}" Width="2*" />
        <DataGridTextColumn Header="Left Value" FontSize="12" Binding="{Binding LeftValue}"  Width="4*" />
        <DataGridTextColumn Header="Right Value" FontSize="12" Binding="{Binding RightValue}"  Width="4*"/>                                
    </DataGrid.Columns>
</DataGrid>

おそらく、コメントアウトされたトリガーからわかると思いますが、最初は、グリッド内で異なるものとしてマークされているすべてのエントリ (コード ビハインドの列挙型) の色を変更することを計画していました。しかし、それはうまくいかなかったので、トリガーに関係なく、スタイルがまったく設定されているかどうかを試してみたかった.

このスタイルが適用されていない理由を誰かが見たり知ったりしていますか?

4

2 に答える 2

0

DataGridRow のスタイル設定は、オブジェクト グラフの上位、特に交互行の背景で発生する設定によって混乱する可能性があります。sa_ddam213 の回答に示されているように、他に何も宣言されていない場合、Xaml は機能します。純粋に診断アクセラレータとして、これらの 4 行を DataGrid 宣言に追加します...

  RowBackground="Transparent"
  Background="Transparent"
  AlternatingRowBackground="Transparent"
  Foreground="Transparent"

次に、フォアグラウンド プロパティとそのトリガーを調べます。次に、DataGrid でこれら 4 つのプロパティを変更して、交絡の影響を特定 (および削除) できます。

于 2013-07-12T01:20:24.443 に答える
0

うまく機能しているようです。役立つ場合に備えて、以下にテストコードを追加しました

Xaml:

<Window x:Class="WpfApplication7.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" Name="UI">
    <DataGrid Name="dgProperties" Background="#1E918D8D" SelectionMode="Extended" SelectionUnit="FullRow" ItemsSource="{Binding Items, ElementName=UI}" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserSortColumns="True" IsReadOnly="True">
        <DataGrid.RowStyle>
            <Style  TargetType="{x:Type DataGridRow}" >
                <Setter Property="Foreground" Value="Black" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=DiffState}" Value="Different">
                        <Setter Property="Foreground" Value="Red" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>

        <DataGrid.Columns>
            <DataGridTextColumn Header="Property" FontSize="12"  Binding="{Binding Name}" Width="2*" />
            <DataGridTextColumn Header="Left Value" FontSize="12" Binding="{Binding LeftValue}"  Width="4*" />
            <DataGridTextColumn Header="Right Value" FontSize="12" Binding="{Binding RightValue}"  Width="4*"/>
        </DataGrid.Columns>
    </DataGrid>
</Window>

コード:

public partial class MainWindow : Window
{
    private ObservableCollection<GridItem> items = new ObservableCollection<GridItem>();

    public MainWindow()
    {
        InitializeComponent();
        for (int i = 0; i < 1000; i++)
        {
            Items.Add(new GridItem { Name = "StackOverflow" + i, LeftValue = i % 4, RightValue = i % 2 });
        }
    }

    public ObservableCollection<GridItem> Items
    {
        get { return items; }
        set { items = value; }
    }

}

public class GridItem
{
    public string Name { get; set; }

    public int LeftValue { get; set; }
    public int RightValue { get; set; }

    public DiffState DiffState
    {
        get
        {
            if (LeftValue == RightValue)
            {
                return DiffState.Same;
            }
            return DiffState.Different;
        }
    }
}

public enum DiffState
{
    Different,
    Same
}

結果:

ここに画像の説明を入力

于 2013-07-11T23:13:03.063 に答える