1

私の質問はWPF Grid - How to apply a style for just one column? に似ています GridViewしかし、の内部に適用されますListView

TextBlock内の特定の列でのみテキストの色を変更するトリガーを適用しようとしていますGridView。コメントさTHISれた行を取り出すと、行の各テキストブロックが影響を受けます。

<ListView>
    <ListView.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Foreground" Value="White" />
        </Style>
    </ListView.Resources>
    <ListView.View>
        <GridView x:Name="MyGridView" ColumnHeaderContainerStyle="{StaticResource GridViewColumnHeaderStyleNew}">
            <GridViewColumn Width="90" Header="Name" DisplayMemberBinding="{Binding Name}"/>
            <GridViewColumn Width="90" Header="Option" DisplayMemberBinding="{Binding Option}"/>
            <GridViewColumn Width="90" Header="Dir" DisplayMemberBinding="{Binding Directory}"/>
            <GridViewColumn Width="90" Header="Size" DisplayMemberBinding="{Binding Size}"/>
            <GridViewColumn Width="90" Header="Status" >
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Status}">
                            <TextBlock.Style>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Setter Property="Foreground" Value="White" />
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Status}" Value="Overheating">
                                            <DataTrigger.EnterActions>
                                                <BeginStoryboard>
                                                    <Storyboard>
                                                        <ColorAnimation Storyboard.TargetProperty="Foreground.Color" From="White" To="Red" Duration="0:0:2" AutoReverse="True" RepeatBehavior="Forever" />
                                                    </Storyboard>
                                                </BeginStoryboard>
                                            </DataTrigger.EnterActions>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

その行にどのような変更を加えれば、テキスト ブロックを含む 5番目の列だけがマルチトリガーの影響を受けるようになりますか?

[編集 1]のコードを追加GridView

[EDIT 2]GridViewColumn独自のスタイルを与えるために最後を変更しました

[編集3]プロパティを削除しDisplayMemberBindingて追加しましたSetter...動作します:)。

正解を反映するようにソース コードを更新しました。

4

2 に答える 2

0

マルチバインディングを使用し、GridViewColumn と GridView をコンバーターに渡す必要があります。これにより、COLUMN 番号が決定されます。自動的に機能する RelativeSource バインディングを使用してそれらを渡すことができます。私が知る限り、「列」プロパティはありません。

コンベターでは、GridView.Columns.IndexOf(YourColumn) を実行します。または、ビューモデルを変更して新しいプロパティ「StyleColumn」を追加し、バインド可能な列を使用するWPF MVVM: GridViewColumn を ViewModel-Collection にバインドする方法は?

于 2013-05-17T05:10:43.673 に答える