2

リスト ビューで選択した項目の背景をプログラムで変更する必要があります。

現在のスタイルは次のようになっています (デフォルト)

        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background">
                <Setter.Value>
                    <ImageBrush ImageSource="images/selection-large.png"/>
                </Setter.Value>
            </Setter>
        </Trigger>

選択した項目の背景画像をプログラムで変更できるようにする必要があります。

私はこれを自分でやろうとしましたが、どうすればいいのかよくわかりません。リストビューにスタイル プロパティがあることに気付きましたが、それ以外は完全に困惑しています。

私はVB.netを使用しています

編集

このようなものは機能しますか?もしそうなら、私は何を間違っていますか?私のリストビューは、このコードでは完全に見えません。

    Dim trigger As New Trigger()
    trigger.Property = ListViewItem.IsSelectedProperty
    trigger.Value = True
    trigger.Setters.Add(New Setter(ListViewItem.BackgroundProperty, Brushes.Pink))
    mylistview.Style.Triggers.Add(trigger)
    mylistview.ItemContainerStyle = Style
4

3 に答える 3

0

XAML内でこれを行うことができます。これを試してください:

<Window.Resources>
    <Style TargetType="{x:Type ListViewItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListViewItem}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
                        <ContentPresenter />
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter Property="Background">
                                <Setter.Value>
                                    <ImageBrush ImageSource="images/selection-large.png"/>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
于 2013-08-03T14:33:46.813 に答える
0

私は最終的にそれを解決することができました..私がしなければならなかったのは、最初のものに基づいて別のスタイルを作成し、両方に異なる x:keys を与えることでした..その後、私はこのようなスタイルを変更することができました.

mylistview.ItemContainerStyle = DirectCast(FindResource("XKeyName"), Style)
于 2013-08-03T15:01:02.110 に答える
0

IsSelectedプロパティをViewModelのブール値にバインドし、それを切り替えます。

<ListView.ItemContainerStyle>
   <Style TargetType="ListViewItem">
      <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
   </Style>
</ListView.ItemContainerStyle>

アイテム ビューモデル:

private bool _isSelected;
public bool IsSelected
{
    get { return _isSelected; }
    set 
    {
        _isSelected = value;
        NotifyPropertyChange("IsSelected");
    }
}

WPF では、手続き型コードで UI 要素を操作するのではなく、DataBinding を使用してモデル / ViewModel のプロパティを操作します。

余談ですが、WPF の通常の UI 要素に PNG やその他のビットマップ ベースのものを使用しないことをお勧めします。

その代わりに、ベクターベースで解像度に依存しない WPF 要素を使用して UI を作成する必要があります。

于 2013-08-03T13:36:15.170 に答える