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;
}
...