web-dev-qa-db-ja.com

コードで動的リソーススタイルを割り当てる方法

XAMLでこれと同等のものをコードで生成したい:

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

テキストと幅はできますが、動的リソースをスタイルに割り当てる方法は次のとおりです。

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

あなたが試すことができます:

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

楽しい!

34
Alastair Pitts

DynamicResourceの実際の動作、つまりリソー​​スが変更されたときにターゲット要素を更新する場合は、 FrameworkElement.SetResourceReference を使用する必要があります。

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

これは動作するはずです:

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

元の質問は、それを動的にする方法でした。つまり、リソースが変更された場合、コントロールが更新されます。上記のベストアンサーはSetResourceReferenceを使用しました。 Xamarinフレームワークの場合、これは利用できませんが、SetDynamicResourceは利用可能であり、元のポスターが求めていたとおりのことを行います。簡単な例

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

呼び出し中:

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

この方法でリソースを使用するすべてのコントロールのプロパティを変更します。これはどのプロパティでも機能するはずです。

1
user9220597