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

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

2 голосов
/ 09 февраля 2009

Привет, есть ли способ изменить кисть ресурса из кода или с помощью какой-либо привязки? я хочу изменить цвет моей «основной» кисти при нажатии кнопки.

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

Edit:

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

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

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

Ответы [ 2 ]

2 голосов
/ 09 февраля 2009

Для анимации изменения попробуйте создать раскадровку и вызвать на ней Begin.

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

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

0 голосов
/ 09 февраля 2009

Если вы используете шаблон 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;
     }
     ...
...