我正在尝试创建基本XAML Button类的扩展,该类将采用可设置且可重新调整大小的DataTemplate
作为其内容。目标是不使用ControlTemplate,这样我就不需要重新定义XAML提供的所有默认Button状态。
我有一个基本DependencyProperty
的自定义按钮类,如下所示:
// IconButton.xaml.cs
public sealed partial class IconButton : Button
{
public readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(DataTemplate), typeof(IconButton), new PropertyMetadata(App.Current.Resources["PlaceholderSmiley"]));
public readonly DependencyProperty IconSizeProperty = DependencyProperty.Register("IconSize", typeof(double), typeof(IconButton), new PropertyMetadata(20));
public DataTemplate Icon
{
get { return (DataTemplate)GetValue(IconProperty); }
set { SetValue(IconProperty, value); }
}
public double IconSize
{
get { return (double)GetValue(IconSizeProperty); }
set { SetValue(IconSizeProperty, value); }
}
public IconButton()
{
this.DataContext = this;
}
}
和XAML:
// IconButton.xaml
<Button
x:Class="CustomControls.IconButton"
... >
<Viewbox Width="{Binding IconSize}" Height="{Binding IconSize}">
<ContentPresenter ContentTemplate="{Binding Icon}" />
</Viewbox>
</Button>
我这样调用它:
<c:IconButton Height="60" Width="60" IconSize="20" Icon="{StaticResource Info}" />
其中信息是包含DataTemplate
和一个或多个Canvas
的{{1}}。但是,我的IconSize或Icon本身都没有填充完成的按钮。我有一个缺失的步骤吗?
如果我使用这5行代码而不是上面的一行代码,一切都很完美,但使用上面的派生类会清理并保持灵活性:
Path
答案 0 :(得分:0)
原来我在施工时没有打电话给this.InitializeComponent()
。不确定该行是如何被删除的。此外,DependencyProperties需要为static
,或者除了last之外的每个图标都只显示其默认值。