webentwicklung-frage-antwort-db.com.de

Wie weist man einen dynamischen Ressourcenstil im Code zu?

Ich möchte das Äquivalent davon in XAML erzeugen:

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

Ich kann den Text und die Breite bearbeiten, aber wie ordne ich die dynamische Ressource dem Stil zu:

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

Du kannst es versuchen:

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

Genießen!

32
Alastair Pitts

Sie sollten FrameworkElement.SetResourceReference verwenden, wenn Sie ein echtes DynamicResource-Verhalten wünschen, dh das Zielelement wird aktualisiert, wenn sich die Ressource ändert.

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

Das sollte funktionieren:

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

Die ursprüngliche Frage war, wie sie dynamisiert werden kann, dh wenn sich die Ressource ändert, wird das Steuerelement aktualisiert. Die beste Antwort oben verwendet SetResourceReference. Für das Xamarin-Framework ist dies nicht verfügbar, aber SetDynamicResource ist genau das, was das ursprüngliche Poster verlangt. Einfaches Beispiel

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

Jetzt anrufen:

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

Bewirkt, dass die Eigenschaften für alle Steuerelemente, die die Ressource verwenden, auf diese Weise geändert werden. Dies sollte für jede Eigenschaft funktionieren.

0
user9220597