我正在尝试制作一个 wpf 样式,它允许我: 1. 基于基本样式的基础替代样式 2. 将基本样式设置为每个控件在未应用样式时使用的默认样式。
例如,我有代码为按钮设置样式......
<!--Base Button-->
<Style TargetType="Button" x:Key="BaseButton">
<Setter Property="Width" Value="auto"/>
<Setter Property="MaxWidth" Value="100"/>
<Setter Property="Height" Value="auto"/>
<Setter Property="MaxHeight" Value="50"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Cursor" Value="Hand"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value=".85"/>
</Trigger>
</Style.Triggers>
</Style>
<!--Apply Base to any Button without a style-->
<Style TargetType="Button" BasedOn="{StaticResource BaseButton}"/>
这是特定按钮的样式...
<Style TargetType="Button" x:Key="DeleteBtn" BasedOn="{StaticResource BaseButton}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="35"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="(some url)" Height="16" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<Label Content="Delete" HorizontalAlignment="Left" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
正如您所看到的,我希望能够将“DeleteBtn”样式建立在基础上,但也让基础成为屏幕上放置的每个没有特定样式集的按钮的默认值。目前,这仅适用于按钮,不适用于其他控件。上面的例子确实有效,但我似乎无法对标签、文本框等做同样的事情。任何想法或输入将不胜感激:)
这是一个不起作用的示例..
<!--Base Icon-->
<Style TargetType="Image" x:Key="BaseIcon">
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="HorizontalAlignment" Value="Right"/>
</Style>
<!--Apply Base to any Icon without a style-->
<Style TargetType="Image" BasedOn="{DynamicResource BaseIcon}"/>
它给出了一个错误:无法在“Style”类型的“BasedOn”属性上设置“DynamicResourceExtension”。 “DynamicResourceExtension”只能在 DependencyObject 的 DependencyProperty 上设置。
最佳答案
您的示例仅适用于按钮,因为您的“基本”样式仅针对按钮。 即
TargetType="Button"
您可以尝试创建一个针对父 FrameworkElement 的样式。请注意,并非所有属性都受支持。有些属性是子控件所独有的。
关于c# - wpf默认样式和样式基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22491138/