2013-08-03 1 views
2

Мне нужно программно изменить фон выбранного элемента в виде списка.Стиль изменения WPF (с триггером) программно

Стиль в настоящее время выглядит следующим образом (по умолчанию)

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

Мне нужно, чтобы иметь возможность изменить это фоновое изображение выбранного элемента программно.

Я попытался сделать это сам, но я не уверен, как это сделать. Я заметил, что в listview есть свойство styles, но кроме этого я полностью в тупике.

Я использую VB.net

Редактировать

Would что-то нравится эта работа? и если да, то что я делаю неправильно? Мой список полностью невидим с этим кодом.

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 

ответ

0

я смог, наконец, работать его .. Все, что я должен был сделать, это сделать еще один стиль, основанный на первой и дать им оба разных ключа x: .. Тогда я смог изменить стили, подобные этому.

mylistview.ItemContainerStyle = DirectCast(FindResource("XKeyName"), Style) 
0

Свяжите свой IsSelected свойство некоторого значения BOOL в ViewModel и переключите это.

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

Item ViewModel:

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

В WPF вы не манипулируете элементы пользовательского интерфейса в процедурном коде, вместо того, чтобы использовать DataBinding и манипулировать модели/свойства ViewModels'

Как и в сторону, Я рекомендую не использовать PNG или другие материалы, основанные на растровых изображениях, для регулярных элементов пользовательского интерфейса в WPF.

Вместо этого вы должны создать свой пользовательский интерфейс, используя элементы WPF, которые основаны на векторе и, следовательно, независимы от разрешения.

+0

Я не думаю, что понимаю, что вы говорите мне. – Mattigins

+0

@ Mattigins извините за C# вместо VB.Net, я едва могу вспомнить синтаксис VB.Net. Вам нужно прочитать MVVM и почему это важно в WPF, прежде чем писать одну строку кода. –

+0

Я добавил свою попытку к первоначальному сообщению, я на правильном пути? – Mattigins

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> 
+0

Что делает этот код? – Mattigins

+0

Он меняет фон ListViewItem, когда вы выбираете элемент ... это то, что вы хотели выполнить? –

+0

Простите, нет, я уже сделал это с кодом в начальном посте .. мне нужно сделать, это изменить то, что фоновое изображение с помощью кода. – Mattigins