0

我一直在尝试创建一个用户控件库,它只是具有默认 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>

谢谢

4

1 回答 1

1

您将Template控件的设置为空模板(您的模板仅包含触发器)。这是压倒一切现有的显示逻辑。尝试将触发器设置为样式触发器。

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

于 2012-11-30T09:54:02.193 回答