在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查找过早发生。