MVVM中的样式化按钮

MVVM中的样式化按钮,mvvm,styles,basedon,Mvvm,Styles,Basedon,我正在使用MVVM模式编写一个小型WPF应用程序 我在主窗口中为按钮设置了一些样式资源,我希望它们应用于视图中的按钮。问题是有些按钮有一种触发器样式。所以我想从通用样式继承这个样式 这是我的主窗口代码: <Window.Resources> <DataTemplate DataType="{x:Type vm:HomeViewModel}"> <views:HomeView/> </DataTemplate>

我正在使用MVVM模式编写一个小型WPF应用程序

我在主窗口中为按钮设置了一些样式资源,我希望它们应用于视图中的按钮。问题是有些按钮有一种触发器样式。所以我想从通用样式继承这个样式

这是我的主窗口代码:

 <Window.Resources>
    <DataTemplate DataType="{x:Type vm:HomeViewModel}">
        <views:HomeView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:DetailReportViewModel}">
        <views:DetailReportView/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:TransferViewModel}">
        <views:TransferView/>
    </DataTemplate>
    <Style TargetType="{x:Type Button}">
        <Setter Property="Margin" Value="5"/>
        <Setter Property="MinWidth" Value="30"/>
        <Setter Property="Foreground" Value="Red"/>

    </Style>
    <Style TargetType="{x:Type ComboBox}">
        <Setter Property="Margin" Value="5"/>
    </Style>
   </Window.Resources>

这是我的视图/用户控件中的按钮XAML

<Button Content="Delete" Command="{Binding DeleteReportCommand}">
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Mode}">
                            <DataTrigger.Value>
                                <vm:Mode>Add</vm:Mode>
                            </DataTrigger.Value>
                            <Setter Property="Visibility" Value="Collapsed"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Mode}">
                            <DataTrigger.Value>
                                <vm:Mode>Edit</vm:Mode>
                            </DataTrigger.Value>
                            <Setter Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

添加
编辑
我尝试使用BasedOn=“{StaticResource{x:Type Button}进行继承,但似乎不起作用(请参见img)

我尝试使用密钥名,但静态资源找不到密钥名,因为它不在同一视图中。BasedOn不接受动态资源。 我遗漏了什么


谢谢

您可以将所有自定义样式放在单独的资源字典文件中,并将其添加到usercontrol.resources中

请参阅:

或者您可以将所有这些都放在app.xaml(Application.Resources)中


参考此内容:

谢谢。我将所有内容都放在app.xaml中。我不知道为什么我之前没有尝试此操作。我在面板的资源中定义了button的stile,并且有相同的问题,但我不想将样式移动到app.xaml。如果能知道上述方法失败的原因,那就太好了。