有没有办法自动公开包含在用户控件中的标准wpf控件的属性和事件?

时间:2011-01-23 11:26:40

标签: wpf wpf-controls

我包含了一个标准控件,如此处所讨论Quickest way to inherit a standard control in WPF?

在用户控件中。现在有没有办法自动公开包含在用户控件中的标准wpf控件的属性和事件?我可以使用像自动冒泡路由这样的东西,但究竟是怎么做的?

否则我还必须为我的组件创建属性和事件包装器,这很麻烦。

1 个答案:

答案 0 :(得分:1)

是的,您必须在用户控件上提供新的依赖项属性,以将属性公开给外部。举个例子:

TimeframeSelector.xaml

<DatePicker SelectedDate="{Binding Path=StartDate, 
                            RelativeSource={RelativeSource Mode=FindAncestor, 
                              AncestorType={x:Type ctrl:TimeframeSelector}}}"/>

TimeframeSelector.xaml.cs

    public DateTime StartDate
    {
        get{ return (DateTime)GetValue(StartDateProperty);}
        set { SetValue(StartDateProperty, value); }
    }

    public static readonly DependencyProperty StartDateProperty =
        DependencyProperty.RegisterAttached(
        "StartDate", 
        typeof(DateTime), 
        typeof(TimeframeSelector), 
        new FrameworkPropertyMetadata(
            DateTime.MinValue,
            FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

您需要使用RelativeSource绑定,否则您将无法在可视树中找到DP。如果您使用的是Visual Studio,则可以使用名为propdp的模板来快速创建依赖项属性。