c# - template - wpf window title color




C'è un modo per costruire un DataTemplate con solo C# (2)

C'è un modo per costruire un DataTemplate con solo C #

Sì, si utilizza FrameworkElementFactory o il metodo XamlReader.Load per creare un DataTemplate a livello di DataTemplate .

... senza utilizzare la deprecata FrameworkElementFactory o il metodo XamlReader.Load ?

Risposta breve: No.

Perché avresti bisogno ancora di un altro modo quando ce ne sono già due? Si noti inoltre che è perfettamente utile utilizzare la classe FrameworkElementFactory se non si desidera utilizzare le stringhe. Nonostante ciò che dice la documentazione su MSDN, questo tipo non è realmente contrassegnato come obsoleto o deprecato in .NET Framework 4.7.2.

C'è un modo per creare un DataTemplate senza usare il deprecated FrameworkElementFactory o il metodo XamlReader.Load di interpretazione delle stringhe al codice (domanda correlata) o (un altro argomento correlato) ?

DataTemplate dt = new DataTemplate();
StackPanel sp = new StackPanel();
ComboBox cellComboBox = new ComboBox() { Visibility = Visibility.Collapsed };
CheckBox cellCheckBox = new CheckBox() { Visibility = Visibility.Collapsed };

sp.Children.Add(cellComboBox);
sp.Children.Add(cellCheckBox);

// then add the stackpanel somehow?

Aggiornamento: perché? Questo è per un nuovo programma che potrebbe dover essere supportato per anni. L'analisi delle stringhe di XamlReader in fase di esecuzione per qualcosa che ha un costruttore, i metodi, le proprietà ... si sente kludgy. FrameworkElementFactory è stato deprecato per diverse versioni ma non ha mai avuto un vero sostituto.


Per elaborare la risposta di @ mm8: no, perché se si ispeziona il metodo FrameworkTemplate.LoadContent , si scoprirà che un modello è fondamentalmente un wrapper che utilizza un FrameworkElementFactory o un TemplateContent per caricare il contenuto, TemplateContent è un'utilità per leggere il nodo XAML ruscello. Quindi questi sono gli unici due modi in cui un modello può funzionare.

Personalmente, raccomando di usare XAML (come un file * .xaml separato piuttosto che una string ), perché è molto più leggibile, ma anche perché FrameworkElementFactory ha funzionalità limitate, cioè supporta solo le proprietà di dipendenza e gli eventi indirizzati ( non è possibile creare una fabbrica che imposti una proprietà CLR o un gestore eventi regolari). Tuttavia ha un vantaggio su XAML - supporta le classi generiche, quindi forse un mix dei due è l'approccio più corretto.







datatemplate