用户控制按钮 - 样式 - WPF

时间:2012-11-30 09:49:31

标签: wpf xaml button user-controls wpf-controls

我一直在尝试创建一个用户控件库,它只具有默认WPF控件的样式版本。基本上我在每个项目中使用相同类型的控件。

所以我想,而不是重新设计每个项目中的所有内容,我可以创建一个用户控件库,它可以预先设置所有控件的样式。但是,我似乎无法将样式应用于控件,因为它留下了一个空白框。

这是按钮控件的XAML。我知道我必须做一些完全错误的事情,但我似乎无法在网上找到有关如何做到这一点的任何信息。

基本上我只想让它成为标准的wpf按钮,但字体为“Century Gothic”,点击时为绿色背景等。

有人能指出我正确的方向吗?

<Button x:Class="IM.WPF.Controls.imButton"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        mc:Ignorable="d"
        d:DesignHeight="23"
        d:DesignWidth="75">

  <Button.Style>
    <Style TargetType="Button"
           x:Name="imButtonStyle">
      <Setter Property="SnapsToDevicePixels"
              Value="True" />
      <Setter Property="OverridesDefaultStyle"
              Value="True" />
      <Setter Property="Content"
              Value="imButton" />
      <Setter Property="BorderBrush"
              Value="#006150" />
      <Setter Property="FontFamily"
              Value="Century Gothic" />
      <Setter Property="FontSize"
              Value="12" />
      <Setter Property="Foreground"
              Value="#006150" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <ControlTemplate.Triggers>
              <Trigger Property="IsPressed"
                       Value="True">
                <Setter Property="Background">
                  <Setter.Value>
                    <LinearGradientBrush>
                      <GradientStop Color="#006150"
                                    Offset="0" />
                      <GradientStop Color="#006150"
                                    Offset="0.5" />
                      <GradientStop Color="#006150"
                                    Offset="0.5" />
                      <GradientStop Color="#006150"
                                    Offset="0.9" />
                    </LinearGradientBrush>
                  </Setter.Value>
                </Setter>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Button.Style>

  <Button.Background>
    <LinearGradientBrush StartPoint="0,0"
                         EndPoint="0,1">
      <GradientStop Color="White"
                    Offset="0" />
      <GradientStop Color="#E0E0E0"
                    Offset="0.5" />
      <GradientStop Color="LightGray"
                    Offset="0.5" />
      <GradientStop Color="DarkGray"
                    Offset="0.9" />
    </LinearGradientBrush>
  </Button.Background>

</Button>

由于

1 个答案:

答案 0 :(得分:1)

您正在将控件的Template设置为空模板(您的模板仅包含触发器)。这覆盖了现有的显示逻辑。尝试在Style Triger中设置触发器。

此外,如果你所做的只是改变控件的外观,那么比子类化每个控件更好(也更简单)的方法就是为现有控件提供一组Xaml样式。这样,您就拥有了可以应用于任何现有应用程序的可重用ResourceDictionary,并且您的Xaml不必使用大量非标准控件。您也可以选择将其打包为单个Xaml文件,或将其放在可以重复使用的单独程序集中。