代码之家  ›  专栏  ›  技术社区  ›  Jehof

将派生文本框的“文本属性”绑定到另一个文本框不起作用

  •  3
  • Jehof  · 技术社区  · 15 年前

    我有一个类“MyTextBox”,它派生自Silverlight中的默认TextBox。此类当前不包含其他代码。

    我在xaml中设置了一个绑定,将MyTextbox的Text属性绑定到另一个Textbox,以反映Textbox中的输入。结果是MyTextBox不会更新,也不会显示另一个Textbox的文本。

    另外,我为一个普通的文本框做了一个相同的绑定。这很管用。

    下面是绑定的XAML。

    <UserControl x:Class="Silverlight.Sample.Dummy"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:my="clr-namespace:Sample"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    
    <StackPanel x:Name="LayoutRoot" Background="White">
        <TextBox Height="23" x:Name="textBox2"  Width="120" />
        <TextBox Text="{Binding ElementName=textBox2, Path=Text, Mode=TwoWay}" Width="120" />
        <my:NumberTextBox Width="120" Text="{Binding ElementName=textBox2, Path=Text, Mode=OneWay}" />
    </StackPanel>
    

    当我从控件派生时,是否有一些特殊的绑定设置。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Jim McCurdy    15 年前

    首先,对派生my:NumberTextBox的Text属性使用双向绑定。

    my:NumberTextBox类实际上是从TextBox派生的吗?如果是这样的话,你就不需要做其他事情了。如果您正在构建自己的控件,并在my:NumberTextBox类中实现Text属性,请尝试将其设置为dependencProperty以允许双向绑定。例如:

        // The Text dependency property
        #region The Text dependency property
        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(string), typeof(NumberTextBox),
            null);
    
        public string Text
        {
            get { return (string)GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }
        #endregion
    

    祝你好运 吉姆·麦考迪

        2
  •  0
  •   Jehof    15 年前

    最后,我找到了它不起作用的原因。

    我犯了一个错误,我在项目中添加了一个新的Silverlight用户控件(MyTextBox),并将基类从UserControl更改为TextBox(带有相应的Xaml文件)。在这种情况下,绑定不起作用。

    在我将一个普通类添加到我的项目中并从TextBox派生出这个类之后,绑定工作没有任何问题。