如何在VS2010 WPF设计器中控制自定义控件的默认属性

时间:2010-11-26 08:24:55

标签: wpf visual-studio-2010 controls designer

我有一个继承自Button的类。在该类的XAML中,我已经指定了Width and Height和Content,希望当我使用VS2010 WPF设计器将我的控件插入到例如一个窗口,这些将是这些属性的默认值。但是,设计人员使用Button中的默认值。

我的控制XAML:

<Button x:Class="Something.FunctionButton4"
         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="64" d:DesignWidth="64"
    Height="64" Width="64" Content="FunctionButton"
    OverridesDefaultStyle="True"
    Focusable="False">
  <Button.Template>
    <ControlTemplate TargetType="Button">
      ...
    </ControlTemplate>
  </Button.Template>
</Button>

Designer生成XAML:

<my:FunctionButton4 Content="Button" Height="23" x:Name="functionButton43" Width="75" />

我需要做些什么来控制设计器默认值?

3 个答案:

答案 0 :(得分:1)

这是DependencyProperty.OverrideMetadata的用途。

在静态构造函数中,您将调用OverrideMetadata,并使用新的默认值传递FrameworkPropertyMetadata。例如,这会将Button的默认宽度设置为60

public class NewButton : Button
{
   static NewButton()
   {
        WidthProperty.OverrideMetadata(typeof(NewButton), new FrameworkPropertyMetadata((double)60));
   }
}

答案 1 :(得分:0)

删除Height="64" Width="64"。 <{1}}和DesignHeight就足够了。

修改 在你的控件构造函数中。通过检查控件是否处于设计模式,初始化所需的默认值。

DesignWidth

答案 2 :(得分:0)

我之前没有使用它,但我相信这是DependencyProperty.OverrideMetadata的用途。

在您的类中,您将添加一个静态构造函数,在该静态构造函数中,您将调用OverrideMetadata,并使用您的新默认值传递PropertyMetadata。例如:(理论上,未经测试)

static FunctionButton4() {
    WidthProperty.OverrideMetadata(
        typeof(FunctionButton4), new PropertyMetadata(64));
    HeightProperty.OverrideMetadata(
        typeof(FunctionButton4), new PropertyMetadata(64));
}