我正在创建一个新的按钮控件,我想在画笔部分下创建一个新属性,我可以在其中设置hovercolor。有人知道你会怎么做吗?
答案 0 :(得分:1)
最简单的方法添加将出现在" Brush" Properties 面板的一部分是 - 在控件的类代码中定义Brush
属性:
public partial class MyFancyControl : UserControl
{
// ...
public Brush FancyBrush
{
get;
set;
}
// ...
}
该属性将显示在" Brush"没有进一步行动的部分(至少在我的VS2013中,见下文)。
虽然这种属性在大多数情况下都能正常运行,但正确的方法可以将其定义为DependencyProperty
:
public partial class MyFancyControl : UserControl
{
// ...
public Brush FancyBrush
{
get
{
return (Brush)GetValue(FancyBrushProperty);
}
set
{
SetValue(FancyBrushProperty, value);
}
}
public static readonly DependencyProperty FancyBrushProperty =
DependencyProperty.Register("FancyBrush", typeof(Brush), typeof(IntUpDown), new PropertyMetadata(default(Brush)));
// ...
}
使用DependencyProperty
将启用绑定和其他"高级"东西。
提示:使用VS Intellisense助手避免需要键入所有周围的代码 - 键入" propdp"然后按Tab
两次。
要确保该属性将显示在属性面板的正确部分中,请添加Category
属性:
[System.ComponentModel.Category("Brush")]
public Brush FancyBrush
{...
同样,这似乎自动适用于Brush
类型,因此可能没有必要。
您还可以添加Description
属性,该属性将显示在属性面板的工具提示中:
[System.ComponentModel.Description("Gets or sets a brush that defines fancy look of the control.")]
答案 1 :(得分:0)
您可以创建画笔并将其添加为资源,例如:
<SolidColorBrush x:Key="MouseOverColor" Color="#FFFFFFF"/>
然后在按钮模板中的模板触发器中:
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ButtonBorder" Property="Background" Value="StaticResource MouseOverColor}"/>
</Trigger>
以下是资源字典文件中使用已定义画笔的简单按钮:
<SolidColorBrush x:Key="SelectionHighlightBrush" Color="#282828"/>
<SolidColorBrush x:Key="SelectionHighlightTextBrush" Color="White"/>
<SolidColorBrush x:Key="ForegroundBrush" Color="#282828"/>
<SolidColorBrush x:Key="ControlBackgroundBrush" Color="White"/>
<SolidColorBrush x:Key="ControlBorderBrush" Color="#C0C0C0" />
<Style TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="{StaticResource ForegroundBrush}"/>
<Setter Property="Background" Value="{StaticResource ControlBackgroundBrush}"/>
<Setter Property="BorderBrush" Value="{StaticResource ControlBorderBrush}"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate x:Name="temp" TargetType="ToggleButton">
<Border x:Name="bd" CornerRadius="3"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter x:Name="contentPresenter" Margin="{TemplateBinding Padding}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="bd" Property="Background" Value="{StaticResource SelectionHighlightBrush}"/>
<Setter Property="TextElement.Foreground" Value="{StaticResource SelectionHighlightTextBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>