我有一个继承自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" />
我需要做些什么来控制设计器默认值?
答案 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));
}