web-dev-qa-db-fra.com

Comment affecter un style de ressource dynamique dans le code?

Je veux produire dans le code l'équivalent de ceci en XAML:

<TextBlock
Text="Title:"
Width="{Binding FormLabelColumnWidth}"
Style="{DynamicResource FormLabelStyle}"/>

Je peux faire le texte et la largeur, mais comment puis-je affecter la ressource dynamique au style:

TextBlock tb = new TextBlock();
            tb.Text = "Title:";
            tb.Width = FormLabelColumnWidth;
            tb.Style = ???
53
Edward Tanguay

Tu peux essayer:

tb.Style = (Style)FindResource("FormLabelStyle");

Prendre plaisir!

32
Alastair Pitts

Vous devez utiliser FrameworkElement.SetResourceReference si vous voulez un comportement True DynamicResource - c'est-à-dire une mise à jour de l'élément cible lorsque la ressource change.

tb.SetResourceReference(Control.StyleProperty, "FormLabelStyle")
156
Samuel Jack

Cela devrait fonctionner:

tb.SetValue(Control.StyleProperty, "FormLabelStyle");
3
robert.oh.

La question initiale était de savoir comment le rendre dynamique, ce qui signifie que si la ressource change, le contrôle sera mis à jour. La meilleure réponse ci-dessus utilisée a été SetResourceReference. Pour le framework Xamarin, ceci n'est pas disponible mais SetDynamicResource l'est et il fait exactement ce que l'affiche originale demandait. Exemple simple

        Label title = new Label();
        title.Text = "Title";
        title.SetDynamicResource(Label.TextColorProperty, "textColor");
        title.SetDynamicResource(Label.BackgroundColorProperty, "backgroundColor");

J'appelle maintenant:

        App.Current.Resources["textColor"] = Color.AliceBlue;
        App.Current.Resources["backgroundColor"] = Color.BlueViolet;

Fait en sorte que les propriétés changent pour tous les contrôles utilisant la ressource. Cela devrait fonctionner pour n'importe quelle propriété.

0
user9220597