1

我正在使用 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 不接受动态资源。有什么我想念的吗?

谢谢

4

1 回答 1

0

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

请参阅: http: //www.codeproject.com/Articles/35346/Using-a-Resource-Dictionary-in-WPF

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

请参考:http: //msdn.microsoft.com/en-us/library/system.windows.resourcedictionary.aspx

于 2012-05-03T04:58:07.637 回答