Proprietà statiche/dinamiche in codice in WPF e enigma di denominazione
-
29-10-2019 - |
Domanda
Ho un pulsante definito nel mio XAML che ha uno stile pulsante e un grafico vettoriale, è definito così:
<Button
Height="48"
Width="48"
mvp:Presenter.Action="CreateStudentApplication"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Grid.Row="5"
Grid.Column="3"
Style="{DynamicResource BaseButton2}">
<ContentControl Template="{StaticResource ApplicationVector}"/>
</Button>
Nel mio codice di codice, ho un metodo che aggiunge dinamicamente nuovi pulsanti simili a questo a uno stackpanel. In breve, fa qualcosa per la melodia:
var button = new Button();
button.Height = 48;
button.Width = 48;
button.Tag = x.ID;
button.SetResourceReference(TemplateProperty, "ApplicationVector");
button.SetResourceReference(StyleProperty, "BaseButton2");
Ora ecco la parte strana, visualizza solo la grafica vettoriale e nessun pulsante dietro di essa. Quando rimuovo la riga penultima (la linea con il riferimento vettoriale), visualizza il pulsante in stile come dovrebbe essere! Suppongo che impostare il modello stia preparando lo stile, tuttavia sembrano giocare amichevolmente in XAML. Ho anche provato a impostare ContentProperty Instidead di TemplateProperty, ma questo ha portato a una stringa di tipo. Qualche idea? Grazie!
Soluzione
Il tuo XAML e il codice dietro non sono equivalenti. Nel XAML, stai impostando il Content
Proprietà del pulsante per essere un ContentControl
. Nel codice dietro, stai impostando il Template
(o Content
) proprietà per essere il ApplicationVector
risorsa.
Dovresti impostare il Content
Proprietà del pulsante per essere un'istanza di a ContentControl
il cui, di chi Template
La proprietà è impostata per essere tuo ApplicationVector
risorsa.
var contentControl = new ContentControl();
contentControl.SetResourceReference(TemplateProperty, "ApplicationVector");
button.Content = contentControl;