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 = ???
Du kannst es versuchen:
tb.Style = (Style)FindResource("FormLabelStyle");
Genießen!
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")
Das sollte funktionieren:
tb.SetValue(Control.StyleProperty, "FormLabelStyle");
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.