【问题标题】:How to bind directly to a control如何直接绑定到控件
【发布时间】:2014-03-07 10:05:07
【问题描述】:

我创建了一个与 RichTextBox 一起工作的用户控件。用户控件需要使用 RichTextBox,所以我创建了一个这样的依赖属性:

    public static DependencyProperty RichTextEditControlProperty;

    static RichTextBoxToolbar()
    {
        RichTextEditControlProperty = DependencyProperty.Register("RichTextEditControl", typeof(RichTextBox), typeof(RichTextBoxToolbar), new FrameworkPropertyMetadata(null));
    }

    public RichTextBoxToolbar()
    {
        InitializeComponent();
    }

    public RichTextBox RichTextBoxControl
    {
        get { return (RichTextBox)GetValue(RichTextEditControlProperty); }
        set { SetValue(RichTextEditControlProperty, value); }
    }

但是,我不知道如何在 XAML 中设置此属性。我试过这样

my:RichTextBoxToolbar Margin="0" DockPanel.Dock="Top" 
                      RichTextBoxControl="{Binding , ElementName=headerText}"

其中 headerText 是 RichTextBox 的名称。

但是得到以下错误:

无法在类型的“RichTextBoxControl”属性上设置“绑定” '富文本框工具栏'。 “绑定”只能设置在 a 的 DependencyProperty 依赖对象。 C:\Users\stefan.CORP\Documents\Visual Studio

有什么想法吗?

【问题讨论】:

    标签: c# .net wpf controls


    【解决方案1】:

    静态 DependencyProperty 标识符中的属性名称不正确。

    DependencyProperty.Register("RichTextEditControl", typeof(RichTextBox), 
                  typeof(RichTextBoxToolbar), new FrameworkPropertyMetadata(null));
    

    应该是RichTextBoxControl 而不是RichTextEditControl

    将包装器 CLR 属性重命名为 RichTextEditControl:

    public RichTextBox RichTextEditControl
    {
        get { return (RichTextBox)GetValue(RichTextEditControlProperty); }
        set { SetValue(RichTextEditControlProperty, value); }
    }
    

    已注册的属性名称和包装器属性名称应始终保持同步。

    【讨论】:

    • 本来打算这样做,但不得不等待 4 分钟,现在 1 分钟 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    相关资源
    最近更新 更多