4

WPF をさらに掘り下げるにつれて、少し混乱し始めています。この例は、物事をよりよく理解するのに役立つと思います。私の要件は次のとおりです。プレーンな .NET オブジェクトのコレクションへのバインディングを使用している ListView があり、次の 2 つのことを行います。

1)値が特定の値の場合、ListViewの行のセルを強調表示します-これにGridViewColumn.CellTemplateを使用し、DataTriggerでDataTemplateを作成できると思いますが、ここで混乱しています-は、 DataTemplate は ListViewItem であるはずですか、それとも基になるオブジェクト自体のタイプであるはずですか?

これは、WPF で私が混乱する一般的なポイントです..基礎となるコレクション オブジェクト (例で見た) とリスト項目タイプ自体にいつ入力するかわからない. これが私の最初の試みです:

<GridViewColumn Header="Position">
    <GridViewColumn.CellTemplate>
        <DataTemplate DataType="{x:Type ListViewItem}">
            <TextBlock Text="{Binding Path=PositionCode}"></TextBlock>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding PositionCode}" Value="QB">
                    <Setter Property="Foreground" Value="Blue" />
                </DataTrigger>
                <DataTrigger Binding="{Binding PositionCode}" Value="RB">
                    <Setter Property="Foreground" Value="Green" />
                </DataTrigger>
                <DataTrigger Binding="{Binding PositionCode}" Value="WR">
                    <Setter Property="Foreground" Value="Red" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

ただし、これは驚くべきことではありませんが、エラーメッセージが表示されます

Cannot find the Template Property 'Background' on the type 'System.Windows.Controls.ContentPresenter'

2) 1) と同様に、別の基準に同様のルールを適用したい 同様の DataTrigger プロパティに基づくセルだけでなく、行全体を強調表示したいが、同時にセルの強調表示を行の強調表示よりも優先させたい.

これを行うにはどうすればよいですか?また、これを行うにはどのテンプレートをオーバーライドする必要がありますか? ListView.ItemTemplate だと思いますが、データ型は何でしょうか?

4

2 に答える 2

4

これを試して:

<GridViewColumn Header="Position">
    <GridViewColumn.CellTemplate>
        <DataTemplate DataType="{x:Type ListViewItem}">
            <TextBlock Name="TextBlockName" Text="{Binding Path=PositionCode}"></TextBlock>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding PositionCode}" Value="QB">
                    <Setter TargetName="TextBlockName" Property="Foreground" Value="Blue" />
                </DataTrigger>
                <DataTrigger Binding="{Binding PositionCode}" Value="RB">
                    <Setter TargetName="TextBlockName" Property="Foreground" Value="Green" />
                </DataTrigger>
                <DataTrigger Binding="{Binding PositionCode}" Value="WR">
                    <Setter TargetName="TextBlockName" Property="Foreground" Value="Red" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>
于 2012-08-19T18:57:37.273 に答える