1

Strings.itemssourceを使用せずにforeachステートメントを使用してリストビューをプログラムで入力し、このスタイルトリガーを作成しました(これは正しいようです)

<ListView.Resources>
            <Style TargetType="ListViewItem">
                <Setter Property="IsSelected" Value="True" />
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="Green"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
</ListView.Resources>

次に、プロジェクトを実行してリストビューアイテムをクリックします...背景は青です.......。

スタイルトリガーでデータバインディングを使用する必要があるのか​​、トリガーが間違っているのか、または誰かがアイデアを持っているのかどうか疑問に思っています。???

4

2 に答える 2

1

トリガーは正常に機能しますが、問題は、ListViewItemのコントロールテンプレートが実際にはBackgroundプロパティの値をコントロールの背景色として使用しないことです。

代わりに、SystemColors.HighlightBrushプロパティの値を使用します。これは、デフォルトでは青です(したがって、Windowsでは通常選択が行われるように常に見えます)。

そのプロパティにはリソースキーが関連付けられているため、同じキーを使用して新しいブラシを定義するだけで、代わりにそのキーがListViewによって使用されます。そして今、トリガーを取り除くこともできます。

<ListView.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
</ListView.Resources>
于 2012-10-22T14:30:13.063 に答える
1

あなたの問題はバインディングとは関係ありません、そしてそれが効果がないことを除いて、トリガーもOKです。

選択したListViewItemの背景色は、 MSDNの例に示すように、ListViewItemのControlTemplateのVisualStateManagerによって設定されます。

<Style TargetType="ListViewItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Border x:Name="Border" Background="Transparent" ...>
                    <VisualStateManager.VisualStateGroups>
                        ...
                        <VisualStateGroup x:Name="SelectionStates">
                            <VisualState x:Name="Unselected" />
                            <VisualState x:Name="Selected">
                                <Storyboard>
                                    <ColorAnimationUsingKeyFrames
                                        Storyboard.TargetName="Border"
                                        Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
                                        <EasingColorKeyFrame KeyTime="0"
                                            Value="{StaticResource SelectedBackgroundColor}" />
                                    </ColorAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            ...
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

アイテムの背景をどの値に設定しても{StaticResource SelectedBackgroundColor}、アイテムの状態がのときの値に設定されますSelected。ただし、次の行をListViewItemスタイルに追加して、SelectedBackgroundColorリソースの値をオーバーライドすることができます。

<Style TargetType="ListViewItem">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Green" />
    </Style.Resources>
    ...
</Style>
于 2012-10-22T14:30:54.000 に答える