2016-08-09 43 views
1

Genug, meinen Kopf auf meiner Tastatur zu schlagen. Ich habe eine Listview, die perfekt funktioniert wie folgt:Erstellen und stylen Sie eine ListView alle in Code hinter

FCView.FCListView.ItemsSource = myItemsSouce; 
CollectionView view = CollectionViewSource.GetDefaultView(FCView.FCListView.ItemsSource) as CollectionView; 
PropertyGroupDescription gd = new PropertyGroupDescription("Root"); 
view.GroupDescriptions.Add(gd); 

Unstyled listview

Jetzt alles, was ich tun möchte, ist jene Gruppe fett Header zu machen. 3 Stunden später, das ist das Beste, was ich mit oben kommen kann:

Style myStyle = new Style(typeof(GroupItem));  
DataTemplate dt = new DataTemplate(); 
FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(GroupItem)); 
spFactory.SetValue(GroupItem.FontWeightProperty, FontWeights.Bold); 
spFactory.SetValue(GroupItem.ForegroundProperty, new SolidColorBrush(Colors.Red)); 
dt.VisualTree = spFactory; 
GroupStyle groupStyle = new GroupStyle(); 
groupStyle.HeaderTemplate = dt; 
groupStyle.ContainerStyle = myStyle; 
FCListView.GroupStyle.Add(groupStyle); 

Aber diese überschreibt meine Groupdescription, wenn ich wieder binden sie (die überflüssig scheint und nicht richtig entweder arbeiten). Gibt es einen einfacheren Weg, um den Gruppenkopf (oder, wie gut, nicht Stil die anderen Listenansicht Artikel unter dem Gruppenkopf)

Antwort

0

der Tat ist es nicht so gut mit einem GroupItem (die eine ContentControl ist), um Stil für datatemplating Sie Überschrift. An deiner Stelle würde ich eine einfache TextBlock verwenden.

Der Punkt ist, dass Sie die Gruppen Beschreibungen nicht sehen können, nur weil Ihre DataTemplate nicht an sie gebunden ist. So fügen Sie einfach die Kommentarzeile:

Style myStyle = new Style(typeof(GroupItem));  
DataTemplate dt = new DataTemplate(); 
FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(GroupItem)); 
spFactory.SetValue(GroupItem.FontWeightProperty, FontWeights.Bold); 
spFactory.SetValue(GroupItem.ForegroundProperty, new SolidColorBrush(Colors.Red)); 
// You missed next line 
spFactory.SetBinding(GroupItem.ContentProperty, new Binding("Name")); 
// 
dt.VisualTree = spFactory; 
GroupStyle groupStyle = new GroupStyle(); 
groupStyle.HeaderTemplate = dt; 
groupStyle.ContainerStyle = myStyle; 
FCListView.GroupStyle.Add(groupStyle); 

Auf diese Weise können Sie die Name der Gruppe binden kann (das heißt seine Beschreibung) mit dem GroupItem ‚s Inhalt.

Der beste Weg zum Erstellen einer Vorlage ist die Verwendung von XAML. Wie auch immer, wenn ich aus irgendwelchen Gründen Code verwenden soll, verwende ich:

DataTemplate dt = new DataTemplate(); 
FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(TextBlock)); 
spFactory.SetValue(TextBlock.FontWeightProperty, FontWeights.Bold); 
spFactory.SetValue(TextBlock.ForegroundProperty, new SolidColorBrush(Colors.Red)); 
spFactory.SetBinding(TextBlock.TextProperty, new Binding("Name")); 
dt.VisualTree = spFactory; 
GroupStyle groupStyle = new GroupStyle(); 
groupStyle.HeaderTemplate = dt; 

FCListView.GroupStyle.Add(groupStyle); 

Ich hoffe, es kann Ihnen helfen.