如何绑定到自定义按钮类?

时间:2016-06-18 02:45:40

标签: c# xaml uwp

我正在尝试创建基本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

1 个答案:

答案 0 :(得分:0)

原来我在施工时没有打电话给this.InitializeComponent()。不确定该行是如何被删除的。此外,DependencyProperties需要为static,或者除了last之外的每个图标都只显示其默认值。