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

发布于 2024-10-13 07:42:16 字数 271 浏览 1 评论 0原文

我按照此处讨论的方式包装了一个标准控件 继承标准的最快方法WPF 中的控件?

在用户控件中。现在有没有一种方法可以自动公开包装在用户控件中的标准 wpf 控件的属性和事件?我可以使用自动冒泡路由之类的东西,但具体如何使用?

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

I wrapped a standard control as discussed here Quickest way to inherit a standard control in WPF?

in a user control. Now is there a way to automatically expose properties and events of a standard wpf control wrapped in a user control ? Could I use something like automatic Bubbling routing but how exactly ?

Otherwise I'll have to also create properties and events wrappers for my component that is cumbersome.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

或十年 2024-10-20 07:42:16

是的,您必须在用户控件上提供新的依赖属性才能将属性公开给外部。例如:

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 的模板非常快速地创建依赖属性。

Yes, you have to provide new Dependency Properties on the user control to expose properties to the outside. As an example:

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));

You need to use the RelativeSource binding as you won't find the DP in the visual tree otherwise. If you are using Visual Studio, there is template named propdp which you can use to create depedendency properties very fast.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文