Я делаю дополнение к приложению Windows WPF. Поэтому я могу получить доступ к ListView с помощью программирования, но не могу редактировать источник WPF.
Чтобы добавить специальное форматирование для ListViewItem
в зависимости от данных, я создал свой собственный класс StyleSelector
и назначил его экземпляр свойству ItemContainerStyleSelector
ListView.
Вот источник:
public class MySelector extends System.Windows.Controls.StyleSelector {
private var oldSelector : System.Windows.Controls.StyleSelector;
public function MySelector(oldSelector : StyleSelector, debug : Object) {
this.oldSelector = oldSelector;
}
public function SelectStyle(item : Object, container : DependencyObject) : Style {
if (this.oldSelector != null) {
var oldStyle : System.Windows.Style = this.oldSelector.SelectStyle(item, container);
if (item[3] == "3") {
var newStyle : System.Windows.Style = new System.Windows.Style(oldStyle.TargetType, oldStyle);
newStyle.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Red));
return newStyle;
} else {
return oldStyle;
}
}
return null;
}
}
Это берет старый селектор и добавляет красный фон, если индекс столбца 3 содержит значение, равное "3"
.
Это работает нормально, но когда строка в ListView наведена или выбрана, по-прежнему применяется исходный стиль, и красный фон теряется до тех пор, пока строка не будет выбрана или не наведена.
Как я могу применить свой красный фон для этих строк, даже когда они выбраны или наведены?
Помните, что я не могу редактировать XAML, но программно получаю доступ к большинству свойств. В случае, если это аддон-код, написанный на JScript.NET.
Теперь я попытался добавить триггеры в newStyle
с помощью программирования:
var t1 : Trigger = new Trigger();
t1.Property = ListBoxItem.IsSelectedProperty;
t1.Value = true;
t1.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Black));
newStyle.Triggers.Add(t1);
var t2 : Trigger = new Trigger();
t2.Property = UIElement.IsMouseOverProperty;
t2.Value = true;
t2.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Violet));
newStyle.Triggers.Add(t2);
var t3 : Trigger = new Trigger();
t3.Property = UIElement.IsFocusedProperty;
t3.Value = true;
t3.Setters.Add(new Setter(Control.BackgroundProperty, System.Windows.Media.Brushes.Yellow));
newStyle.Triggers.Add(t3);
Нет эффекта.
newStyle.Triggers
- person Brent Stewart   schedule 12.03.2013ItemTemplate
иItemTemplateSelector
этоnull
. НоTemplate
кое-что понял. Это тоже можно применить? - person ZoolWay   schedule 28.03.2013