6

在我的 App.xaml 中,我有一些隐式样式

<Style TargetType="{x:Type Button}">
   ...Blah...
</Style>

只要这些样式不在我创建的自定义控件中,它们就可以用于控件。

我的控制

 public class NavigationControl : Control
 {
     public static readonly DependencyProperty ButtonStyleProperty =
         DependencyProperty.Register("ButtonStyle", typeof(Style), typeof(NavigationControl));

     public Style ButtonStyle
     {
         get { return (Style)GetValue(ButtonStyleProperty); }
         set { SetValue(ButtonStyleProperty, value); }
     }
 }

 static NavigationControl()
 {
     DefaultStyleKeyProperty.OverrideMetadata(typeof(NavigationControl), new FrameworkPropertyMetadata(typeof(NavigationControl)));
 }

 public NavigationControl()
 {
 }

我的控件样式和模板

<ControlTemplate x:Key="NavigationControlTemplate" TargetType="{x:Type controls:NavigationControl}">
   <Button Style="{TemplateBinding ButtonStyle}"
</ControlTemplate>

<Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
    <Setter Property="MinWidth" Value="75"/>
    <Setter Property="Height" Value="50"/>
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Margin" Value="-1"/>
</Style>

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DefaultButtonStyle}">
    <Setter Property="Template" Value="{StaticResource NavigationButtonTemplate}"/>
</Style>

<Style TargetType="{x:Type controls:NavigationControl}">
     <Setter Property="Template" Value="{StaticResource NavigationControlTemplate}"/>
     <Setter Property="ButtonStyle" Value="{StaticResource ButtonStyle}"/>
</Style>

现在我假设 DefaultButtonStyle 的 BasedOn 会从 App 级别得到它。但它没有。应用应用级别样式的唯一方法是通过创建 NavigationControl 类型的样式来覆盖 ButtonStyle。

有没有一种方法可以让隐式风格发挥作用?

4

1 回答 1

2

设置BasedOn="{StaticResource {x:Type Button}}"将为您提供 WPF 的默认按钮样式。如果您想使用 中定义的样式App.xaml,则需要为该样式添加一个键,以便您可以从控件样式中引用它:

应用程序.xaml

<!-- Your style, just with an added x:Key -->
<Style x:Key="myButtonStyle" TargetType="{x:Type Button}">
   ...
</Style>

<!-- Set the above style as a default style for all buttons -->
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource myButtonStyle}">

您的控件样式和模板

<Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource myButtonStyle}">
    ...
</Style>
于 2013-08-23T21:33:24.257 回答