我一直在尝试创建一个用户控件库,它只具有默认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>
由于
答案 0 :(得分:1)
您正在将控件的Template
设置为空模板(您的模板仅包含触发器)。这覆盖了现有的显示逻辑。尝试在Style Triger中设置触发器。
此外,如果你所做的只是改变控件的外观,那么比子类化每个控件更好(也更简单)的方法就是为现有控件提供一组Xaml样式。这样,您就拥有了可以应用于任何现有应用程序的可重用ResourceDictionary
,并且您的Xaml不必使用大量非标准控件。您也可以选择将其打包为单个Xaml文件,或将其放在可以重复使用的单独程序集中。