Sto facendo un addon a un'applicazione Windows WPF. Pertanto posso accedere a ListView con la programmazione ma non modificare la sorgente WPF.Cambia automaticamente ListView Stile del selettore
Per aggiungere una formattazione speciale per lo ListViewItem
s in base ai dati, ho creato la mia classe StyleSelector
e ne ho assegnato un'istanza alla proprietà ListView ItemContainerStyleSelector
.
Qui è la fonte:
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;
}
}
Questo prende la vecchia selettore ed aggiunge uno sfondo rosso se indice di colonna 3 contiene un valore pari a "3"
.
Questo funziona bene ma quando una riga in ListView viene spostata o selezionata, si applica lo stile originale e lo sfondo rosso viene perso finché la riga non è selezionata o scoperta.
Come posso applicare lo sfondo rosso per quelle linee anche quando sono selezionate o al passaggio del mouse?
Ricordare che non è possibile modificare XAML ma accedere in modo programmatico alla maggior parte delle proprietà. Nel caso in cui questo è addon-code scritto in JScript.NET.
Ora ho provato ad aggiungere trigger per newStyle
con la programmazione:
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);
Nessun effetto.
Riesci a guardare la collezione di trigger sul tuo nuovo stile e rimuovere il passaggio del mouse e librarsi trigger? 'newStyle.Triggers' –
Sfortunatamente oldStyle e newStyle non hanno alcun trigger. Possono venire da un tema? @BrentStewart – ZoolWay
Questi effetti del passaggio del mouse e di selezione del mouse potrebbero essere definiti all'interno del modello di elemento (che è DataTemplate). Prima è necessario indagare e scoprire dove si trovano i trigger. Puoi usare, ad esempio, ILSpy, per decompilare il codice xaml dai binari – Woodman