在WPF中使用动态资源设置控件背景颜色?

这是我的XAML

    

所以我有两个问题:

Q1:我现在如何在我的代码中将DynamicBG键值设置为红色 ? (当窗口加载时,我想将其设置为红色)

Q2:这是应该如何使用动态资源吗?

谢谢

要获得对代码Resource的访问权限,必须在App.xaml文件中标识它们:

    

XAML example

     

可以在表单的代码行中更改Resource

 Application.Current.Resources["MyResource"] = MyNewValue; 

例:

Code behind

 // using ContentRendered event private void Window_ContentRendered(object sender, EventArgs e) { SolidColorBrush MyBrush = Brushes.Aquamarine; // Set the value Application.Current.Resources["DynamicBG"] = MyBrush; } private void Button_Click(object sender, RoutedEventArgs e) { SolidColorBrush MyBrush = Brushes.CadetBlue; // Set the value Application.Current.Resources["DynamicBG"] = MyBrush; } 

原则, DynamicResources的设计,因此可以更改。 在哪里改变 – 这是开发人员的任务。 在Color的情况下,它是最常用的方法之一。 有关更多信息,请参阅MSDN 。

PS我建议使用App.xaml ,因为有些情况下成功使用了StaticResource ,但没有使用DynamicResource (资源放在Window.Resources )。 但是在App.xaml移动资源之后,一切都开始起作用了。

A1:您应该将“DynamicBG”移动到窗口资源,之后您可以在Loaded事件处理程序中使用Resources属性:

XAML:

         

代码隐藏:

 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { this.Resources["DynamicBG"] = new SolidColorBrush(Colors.Red); } } 

A2:当您想在运行时更改属性时,应该使用动态资源。

A2:没有。 要做你正在做的事情,最好使用数据绑定。 在viewmodel中有一个属性,指示它是否已“加载”,然后使用合适的转换器将背景绑定到它,或使用触发器。 (如果它实际上是正在加载的UI,则将该属性添加到窗口。)动态资源用于主题和模板,在极少数情况下,StaticResource查找过早发生。