假设我有一个ResourceDictionary:
更新
<SolidColorBrush x:Key="AquaBrush" Color="#257D8E"/>
<SolidColorBrush x:Key="GreenBrush" Color="Green"/>
我有一个带有项目的组合框(Aqua,Green和Gray)当我选择Aqua Button时,它应该显示如下: 我要设置的Button和其他控件也应该将其背景更新为aqua。
如何将SplitView,Button,其他控件的背景绑定到一个属性,当我选择&#34; aqua&#34;它将使用&#34; AquaBrush&#34;当我选择&#34; Green&#34;时,它将使用&#34; GreenBrush&#34;?
感谢。
答案 0 :(得分:1)
由于您在XAML中定义了SolidColorBrush资源,因此您可以从后面的代码执行此操作,以便根据运行时的条件更改背景颜色:
if(Some Condition){
relativePanelName.Background = (SolidColorBrush)Resources["NavPaneBackgroundBrushBlue"];
}else {
relativePanelName.Background = (SolidColorBrush)Resources["NavPaneBackgroundBrushGreen"];
}
希望这会有所帮助..!
修改:
此外,您不仅可以定义自己的静态资源,还可以使用系统theme resources。
例如,您可以像这样访问系统的强调色:
C#
var color = (Color)this.Resources["SystemAccentColor"];
的Xaml
<Grid.Background>
<SolidColorBrush Color="{StaticResource SystemAccentColor}"/>
</Grid.Background>
编辑2: 由于问题已经更改并以更好的方式框架,因此很明显您想要了解应用程序范围的主题。 您可以通过多种方式获得应用程序范围的主题,所以这里有一个:
这样你就可以拥有应用范围的主题。
您还可以从后面的代码访问应用程序资源:
gridName.Background=new SolidColorBrush((Color)Application.Current.Resources["ColorThree"]);
编辑3:
在app.xaml:
<ResourceDictionary>
<Color x:Key="ThemeColor">#f4425f</Color>
<SolidColorBrush x:Key="UserAccentBrush" Color="{StaticResource ThemeColor}"/>
</ResourceDictionary>
点击你的按钮只需更改&#34; UserAccentBrush&#34;的颜色。它将反映在使用画笔的所有控件中。
private void Button_Click(object sender, RoutedEventArgs e)
{
var brush = (SolidColorBrush)Application.Current.Resources["UserAccentBrush"];
if (cb.SelectedIndex != -1)
{
switch (cb.SelectedIndex)
{
case 0:
brush.Color = Color.FromArgb(255, 242, 101, 34);
break;
case 1:
brush.Color = Color.FromArgb(255, 232, 10, 90);
break;
}
}
}
请注意我直接使用application.current.resources,您可能需要修改一下代码..
如果您需要保存此颜色并在下次用户打开应用程序时应用它,则需要将其保存到应用程序设置(或您可能正在维护的任何设置文件),并在应用程序加载时应用颜色更改代码。 !