我包含了一个标准控件,如此处所讨论Quickest way to inherit a standard control in WPF?
在用户控件中。现在有没有办法自动公开包含在用户控件中的标准wpf控件的属性和事件?我可以使用像自动冒泡路由这样的东西,但究竟是怎么做的?
否则我还必须为我的组件创建属性和事件包装器,这很麻烦。
答案 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
的模板来快速创建依赖项属性。