Как назначить динамический стиль ресурса в коде? - PullRequest
54 голосов
/ 18 ноября 2009

Я хочу создать в коде эквивалент этого в XAML:

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

Я могу сделать текст и ширину, но как мне назначить динамический ресурс стилю:

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

Ответы [ 4 ]

161 голосов
/ 18 ноября 2009

Вы должны использовать FrameworkElement.SetResourceReference , если вы хотите истинное поведение DynamicResource - то есть обновление целевого элемента при изменении ресурса.

tb.SetResourceReference(Control.StyleProperty, "FormLabelStyle")
33 голосов
/ 18 ноября 2009

Вы можете попробовать:

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

Наслаждайтесь!

3 голосов
/ 18 ноября 2009

Это должно работать:

tb.SetValue(Control.StyleProperty, "FormLabelStyle");
1 голос
/ 25 ноября 2018

Первоначальный вопрос заключался в том, как сделать его динамическим, что означает, что при изменении ресурса элемент управления обновится. Лучший ответ выше использовал 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;

Вызывает изменение свойств для всех элементов управления, использующих ресурс таким образом. Это должно работать для любой собственности.

...