使用WPF中的动态资源设置控件背景颜色
本文关键字:设置 控件 背景 颜色 资源 动态 WPF 使用 | 更新日期: 2023-09-27 18:21:12
这是我的XAML
<Grid.Resources>
<SolidColorBrush x:Key="DynamicBG"/>
</Grid.Resources>
<Label name="MyLabel" Content="Hello" Background="{DynamicResource DynamicBG} />
所以我有两个问题:
Q1:现在如何在代码中将DynamicBG
键值设置为Red?(当窗口加载时,我想将其设置为红色)
Q2:动态资源应该这样使用吗?
感谢
要访问代码的Resource
,必须在文件App.xaml
:中识别它们
<Application.Resources>
<SolidColorBrush x:Key="DynamicBG" />
</Application.Resources>
XAML example
<Grid>
<Label Name="MyLabel"
Content="Hello"
Background="{DynamicResource DynamicBG}" />
<Button Content="Change color"
Width="100"
Height="30"
Click="Button_Click" />
</Grid>
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。
第页。S.我建议使用App.xaml
,因为有些情况下成功使用了StaticResource
,但没有成功使用DynamicResource
(资源位于Window.Resources
中)。但是在移动App.xaml
中的资源之后,一切都开始工作。
A1:您应该将"DynamicBG"移动到窗口资源,然后您可以在Loaded
事件处理程序中使用Resources
属性:
XAML:
<Window x:Class="MyLabelDynamicResource.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Loaded="Window_Loaded">
<Window.Resources>
<SolidColorBrush x:Key="DynamicBG"/>
</Window.Resources>
<Grid>
<Label Name="MyLabel" Content="Hello" Background="{DynamicResource DynamicBG}" />
</Grid>
</Window>
代码背后:
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:no。要做您正在做的事情,最好使用数据绑定。在视图模型中设置一个属性,指示它是否已"加载",然后使用合适的转换器将背景绑定到它,或者使用触发器。(如果实际上是UI在加载,请将属性添加到窗口中。)动态资源用于主题化和模板,在极少数情况下,StaticResource查找发生得太早。