it-roy-ru.com

Как назначить динамический стиль ресурса в коде?

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

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

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

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

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

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

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

32
Alastair Pitts

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

tb.SetResourceReference(Control.StyleProperty, "FormLabelStyle")
156
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;

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

0
user9220597