ResourceDictionary不用作按钮样式

时间:2019-03-15 16:56:33

标签: c# wpf binding

我正在尝试使用ResourceDictionary为按钮设置样式

 <Window.Resources>
        <vieModel:MainWindowViewModel x:Key="MainViewModel"/>
        <ResourceDictionary x:Key="ButtonStyle"> //If I don't use key it gives error
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="GlassButton.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
     </Window.Resources>

并将其用作

<Button Style="{DynamicResource ButtonStyle}"/>

现在,当我这样做时,它抱怨ResourceDictionary无法应用于Style。当我使用GlassButton.xaml中定义的“ GlassButton”时,它说GlassButton无法解析。

当我像

一样使用它时
<Button Style="{StaticResource ButtonStyle}"/>

或者在两种情况下都使用GlassButton抱怨或不起作用。

GlassButton.xaml看起来像这样,并且可以很好地编译

 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:Citations">

<Style x:Key="GlassButton" TargetType="{x:Type Button}">
    <Setter Property="FontSize" Value="42" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Template">

我以herehere的示例为例,两者都是使用ResourceDictionary的相同方法。我正在按照所示做,但仍然无法正常工作。我需要转换器吗?还是我做错了什么?

2 个答案:

答案 0 :(得分:0)

以下内容对我有用。检查GlassButton.xaml的路径是否正确。如果将其放在“样式”之类的文件夹中,则需要使用Source="Styles/GlassButton.xaml"

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="GlassButton.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
<Grid>
    <Button Style="{DynamicResource GlassButton}"
            Content="Button Content"/>        
</Grid>   

答案 1 :(得分:0)

我应该按如下方式使用它

<Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="GlassButton.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <vieModel:MainWindowViewModel x:Key="MainViewModel"/>
        </ResourceDictionary>
    </Window.Resources>

这有效