wpf默认样式和样式库

时间:2014-03-18 21:10:21

标签: c# wpf xaml styles

我试图制作一个允许我的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上设置。

2 个答案:

答案 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>

编辑:添加派生的右对齐以获得乐趣。

enter image description here