Динамически изменить заливку эллипса из С#

У меня есть шаблон эллиптической кнопки в моем словаре ресурсов "ButtonStyles.xaml". Это часть кода:

<SolidColorBrush x:Key="brush" Color="Red"/>
<Style TargetType="Button" x:Key="MyButtonStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Grid>
                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal">
                                <VisualState.Setters>
                                    <Setter Target="ellipse.(Shape.Fill)" Value="{StaticResource ResourceKey=brush}">
                                    </Setter>
                                    <Setter Target="ellipse.(Shape.Stroke)" Value="{x:Null}"/>
                                </VisualState.Setters>
                            </VisualState>
                            [...]
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>
                    <Ellipse x:Name="ellipse"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

А вот и кнопка на главной странице:

<Button x:Name="toggle" Content="" HorizontalAlignment="Left" Height="132" Margin="40,146,0,0" VerticalAlignment="Top" Width="132" Style="{StaticResource MyButtonStyle}"/>

Теперь я хотел бы изменить ресурс кисти из кода С#. Для этого я пробовал следующим образом:

Application.Current.Resources["brush"] = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 125, 126, 126));

В то время как ресурс кисти эффективно меняет цвет эллипса, это не так. Я думаю, что проблема в том, что я должен изменить цвет не в шаблоне, а в самой кнопке MainPage. Это проблема? Как я могу это сделать?


person MasterArch    schedule 05.03.2016    source источник
comment
Если вы хотите динамически изменять заливку в коде, почему вы делаете ее статическим ресурсом? Почему бы не привязать его к полю?   -  person Felix Castor    schedule 05.03.2016
comment
Это как-то вам поможет Цвет заливки эллипса с помощью c#   -  person CodeConstruct    schedule 05.03.2016


Ответы (1)


Я получил результат по предложению @felix-castor и это руководство. Я поместил DependencyProperty в код C# и Binding в код XAML.

Он работает довольно хорошо, но не обновляет кнопку при изменении свойства, и мне приходится переключаться между VisualStates, чтобы обновить заливку. Я опубликую еще один вопрос об этом. Но если у вас есть предложение, вы можете оставить комментарий.

person MasterArch    schedule 05.03.2016