我试图制作一个允许我的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>
正如您所看到的,我希望能够建立&#34; DeleteBtn&#34;样式离开底座,但基座是屏幕上放置的每个按钮的默认设置,没有特定的样式设置。这当前仅适用于按钮,没有其他控件。上面的例子确实有效,但我似乎无法对标签,文本框等做同样的事情。任何想法或输入都会非常感激:)
这是一个不起作用的例子。
<!--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}"/>
它出错:&#39; DynamicResourceExtension&#39;不能设置在&#39; BasedOn&#39;属性&#39;样式&#39;。 A&#39; DynamicResourceExtension&#39;只能在DependencyObject的DependencyProperty上设置。
答案 0 :(得分:1)
您的示例仅适用于按钮,因为您的“基本”样式仅针对按钮。 即
TargetType="Button"
您可以尝试创建一个以父FrameworkElement为目标的样式。请注意,并非所有属性都受支持。某些属性对于子控件是唯一的。
答案 1 :(得分:1)
它对我有用,只是测试了它。
<Window.Resources>
<Style TargetType="Label" x:Key="BaseLabel">
<Setter Property="Background" Value="Red"/>
<Setter Property="HorizontalContentAlignment" Value="Right"/>
</Style>
<Style TargetType="Label" BasedOn="{StaticResource BaseLabel}"/>
</Window.Resources>
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Bottom" Orientation="Horizontal">
<Label Width="100" Content="TestLabel1"/>
<Label Width="100" Content="TestLabel1" Foreground="White"/>
</StackPanel>
</Grid>
编辑:添加派生的右对齐以获得乐趣。