WPF Редактировать ресурс

Привет, есть ли способ изменить кисть ресурса из кода или через некоторые привязки? что я хочу сделать, это изменить цвет моей "основной" кисти при нажатии кнопки.

Большое спасибо!

Редактировать:

Это GradientBrush, как я могу изменить цвета на этом?

myBrush.GradientStops[0].Color = Colors.Red;

просто дает мне исключение... и есть ли способ оживить изменение цвета, как раскадровка?

2 ответа

Чтобы оживить изменение, попробуйте создать раскадровку и вызвать на ней Begin.

(Я пойду скину пример)

редактировать: похоже, это еще один Silverlight!= WPF не с моей стороны. Я не могу заставить его работать в WPF.

Если вы используете шаблон Model-View-ViewModel (MVVM) или что-то подобное, вы можете сделать цвет кисти (или всю кисть) свойством модели представления и привязать ее непосредственно к нему.

По моему (неопытному) мнению, ресурсы не должны меняться во время выполнения. Если это изменится, свяжите это.

(edit2: изменен с верхнего уровня UserControl в стиле Silverlight на окно WPF. Как отметил Рэй Бойсен в комментариях, UserControl в WPF выставляет цвет через DependencyProperty, не привязывая его к ViewModel.)

XAML:

<Grid x:Name="LayoutRoot">
    <Grid.Background>
        <SolidColorBrush Color="{Binding BackgroundColor}" />
    </Grid.Background>
    ...

Вид модели:

public class MyViewModel : INotifyPropertyChanged
{
    public Color BackgroundColor
    {
        get { ... }
        set { ... } // fire PropertyChanged event
    }
    ...

XAML.cs:

public partial class MyWindow : Window
{
     private MyViewModel m_viewmodel;

     public MyWindow()
     {
          InitializeComponent();
          viewmodel = new MyViewModel();
          this.LayoutRoot.DataContext = viewmodel;
     }

     private void ButtonClick(object sender, RoutedEventArgs e)
     {
         this.viewmodel.BackgroundColor = Color.Red;
     }
     ...
Другие вопросы по тегам