我为各种控件定义了样式即。文本框,组合框,日期选择器等。在我的应用程序中。这些样式所需的资源存在于其他样式中,所有样式都存在于ResourceDictionary中。
我想根据一些配置设置将这些控件的背景颜色更改为黄色。
我正在考虑使用附加属性并将它们与样式一起使用并设置背景颜色。但不确定如何实现它。
请建议是否有其他方法。
谢谢,
阿卜迪
答案 0 :(得分:0)
你可以尝试这个解决方案:
在视图:
中像'myForm'
或其他任何方式调用您的窗口:
我在这种情况下使用了一些radiobuttons。每个都有相关的颜色您可以根据您的要求进行调整。
<UniformGrid Columns="0"
x:Name="_skinChanger"
Grid.Column="0" Grid.Row="1" Width="200">
<RadioButton x:Name="BlueSkin"
Content="Blue Skin" HorizontalAlignment="Left" Width="131" />
<RadioButton x:Name="None"
Content="No Skin"
IsChecked="True" HorizontalAlignment="Left" Width="87" />
<RadioButton x:Name="RedSkin"
Content="Red Skin" Margin="0,0,0,4" HorizontalAlignment="Left" Width="109" />
<RadioButton x:Name="GreenSkin"
Content="Green Skin" HorizontalAlignment="Left" Width="109" />
</UniformGrid>
要更改样式的元素应使用动态资源:
...
Style="{DynamicResource LabelStyle}"
...
在您的窗口的构造函数中,例如 ...
Loaded += RuntimeSkinning_Loaded;
然后在班级中定义事件。
void RuntimeSkinning_Loaded(object sender, RoutedEventArgs e)
{
// this is my uniformgrid where the radiobuttons are placed. I add a handled for
// the checkedevent.
_skinChanger.AddHandler(RadioButton.CheckedEvent, new RoutedEventHandler(OnSkinChanged));
}
private void OnSkinChanged(object sender, RoutedEventArgs e)
{
string name = (e.OriginalSource as RadioButton).Name;
_registerForm.Resources.Clear();
_registerForm.Resources.MergedDictionaries.Clear();
if (name == "None") return;
ResourceDictionary skin =
Application.LoadComponent(new Uri("/myproject;component/Skins/" + name + ".xaml", UriKind.Relative)) as ResourceDictionary;
_registerForm.Resources.MergedDictionaries.Add(skin);
e.Handled = true;
}