【问题标题】:User control button - Style - WPF用户控制按钮 - 样式 - WPF
【发布时间】:2012-11-18 12:31:22
【问题描述】:

我一直在尝试创建一个用户控件库,该库仅包含默认 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>

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 当然。那对我不好。到目前为止,我一直在复制我的 App.xaml,出于某种原因,我从未想过要使用 ResourceDictionary。 总台
    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 2013-07-11
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2017-01-16
    • 2013-07-03
    相关资源
    最近更新 更多