c# - 想要使用XAML资源文件更改窗口颜色

标签 c# wpf xaml mvvm resources

我想通过应用XAML资源文件中定义的样式来更改窗口的颜色。我创建了一种样式,其目标类型设置为没有键的窗口(假设它将自动应用于所有窗口)。但是该样式未应用于我的应用程序中的窗口。使用以下代码仅适用于窗口中的控件,但不能更改窗口本身的颜色。请让我知道我错了。 如果我给目标类型网格它会改变颜色,但是如果我给窗口则它不会改变颜色

资源文件

<Color x:Key="MainBackgroundColor"></Color>

<SolidColorBrush x:Key="MainBackground" 
                    Color="{Binding Path=DataContext.MainApplicationColor,
    UpdateSourceTrigger=PropertyChanged,
    RelativeSource={RelativeSource AncestorType={x:Type Window}, Mode=FindAncestor}, 
    FallbackValue={StaticResource MainBackgroundColor}}"/>


<Style TargetType="Window">
    <Setter Property="Background" Value="{StaticResource MainBackground}" />            
</Style>

查看
<Window x:Class="MvvmLight1.View.MainMenuView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:ignore="http://www.ignore.com"
        mc:Ignorable="d ignore"  Name="x_main" 
        >
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/ColorResources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Grid Height="60" Width="60">
    </Grid>

</Window>

查看模型*
public string ChangeColorCommandText { get; set; }
private RelayCommand m_cmdChangeColor;
public ICommand ChangeColor
{
    get { return m_cmdChangeColor ?? (m_cmdChangeColor = new RelayCommand(ChangeColorAction, () => true)); }
}


private void ChangeColorAction()
{
    MainApplicationColor = (Color)ColorConverter.ConvertFromString("#4484F3");
}

最佳答案

未将目标类型应用于窗口的原因是,在此使用名称为“MainMenuView”的窗口的派生类型。样式中的 TargetType不管理派生类型。因此,在样式资源中,必须将目标类型设置为派生类型(MainMenuView)。这样,它将仅应用于MainMenuView窗口。

xmlns:local="Yournamespace:YourApplication"

<Style  TargetType="local:MainMenuView">
     <Setter Property="Background" Value="Green" />
</Style>

要将样式应用于应用程序中的所有窗口,则必须为定义的样式设置x:Key,并以xaml或后面的代码从所有窗口中引用样式。

关于c# - 想要使用XAML资源文件更改窗口颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24422208/

相关文章:

c# - 我可以手动创建一个 Controller 实例,然后以用户身份运行它吗?

c# - 如何在 asp.net 最小 api 中创建 azure 事件网格 webhook?

c# - 如何将附加属性绑定(bind)到 ComboBox 的 DisplayMemberPath?

c# - 将 UserControl 添加到 C# 中的变量位置

.net - 如何为 >= Vista 自定义 FileOpen 对话框?

c# - 从选定的数据绑定(bind)列表框项中获取值

javascript - 从razor中的javascript访问对象

c# - 正则表达式无法处理流氓方括号

wpf - DataTrigger.ExistActions 未针对绑定(bind)值 "null"触发

c# - 在 WinRT 中从代码隐藏激活底部 AppBar