在VS WPF设计器中添加新的画笔属性

时间:2017-08-25 16:30:00

标签: wpf visual-studio xaml

我正在创建一个新的按钮控件,我想在画笔部分下创建一个新属性,我可以在其中设置hovercolor。有人知道你会怎么做吗?

2 个答案:

答案 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>