访问wpf用户控件

时间:2016-11-19 11:14:49

标签: c# wpf xaml binding

我创建了一个带有文本框和组合框的wpf用户控件。 为了访问文本框的文本属性,我使用了以下代码

public static readonly DependencyProperty TextBoxTextP = DependencyProperty.Register(
        "TextBoxText", typeof(string), typeof(TextBoxUnitConvertor));

public string TextBoxText
{
    get { return txtValue.Text; }
    set { txtValue.Text = value; }
}

在另一个项目中,我使用了控件并将文本绑定如下:

<textboxunitconvertor:TextBoxUnitConvertor Name="wDValueControl" TextBoxText="{Binding _FlClass.SWa_SC.Value , RelativeSource={RelativeSource AncestorType=Window}, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"  Width="161" Height="28" HorizontalAlignment="Left" VerticalAlignment="Top"/>

我确定用于绑定的类正常工作,因为当我用它来直接在我的项目中使用文本框时它可以正常工作但是当我将它绑定到usercontrol中textbox的text属性时它会带来null并且绑定不起作用。 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您的依赖项属性声明错误。它必须如下所示,其中CLR属性包装器的getter和setter调用GetValue和SetValue方法:

public static readonly DependencyProperty TextBoxTextProperty =
    DependencyProperty.Register(
        "TextBoxText", typeof(string), typeof(TextBoxUnitConvertor));

public string TextBoxText
{
    get { return (string)GetValue(TextBoxTextProperty); }
    set { SetValue(TextBoxTextProperty, value); }
}

在UserControl的XAML中,您将绑定到属性,如下所示:

<TextBox Text="{Binding TextBoxText,
    RelativeSource={RelativeSource AncestorType=UserControl}}" />

如果您需要在TextBoxText属性更改时收到通知,您可以使用传递给Register方法的PropertyMetadata注册PropertyChangedCallback:

public static readonly DependencyProperty TextBoxTextProperty =
    DependencyProperty.Register(
        "TextBoxText", typeof(string), typeof(TextBoxUnitConvertor),
        new PropertyMetadata(TextBoxTextPropertyChanged));

private static void TextBoxTextPropertyChanged(
    DependencyObject o, DependencyPropertyChangedEventArgs e)
{
    TextBoxUnitConvertor t = (TextBoxUnitConvertor)o;
    t.CurrentValue = ...
}

答案 1 :(得分:0)

您没有创建依赖项属性。使用此代码:

public string TextBoxText
        {
            get { return (string)GetValue(TextBoxTextProperty); }
            set { SetValue(TextBoxTextProperty, value); }
        }

public static readonly DependencyProperty TextBoxTextProperty =
            DependencyProperty.Register("TextBoxText", typeof(string), typeof(TextBoxUnitConvertor), new PropertyMetadata(""));

然后在您的自定义控件中绑定 TextBoxTexttxtValue.Text的值