我扩展了文本框的功能,下面是带有附加属性RegularExpressionEnabled的类的一部分:
public class AlphaNumericTextBox : TextBox
{
#region DependencyProperties
public static readonly DependencyProperty RegularExpressionEnabledProperty =
DependencyProperty.Register("RegularExpressionEnabled", typeof(bool), typeof(AlphaNumericTextBox),
new UIPropertyMetadata(false));
public bool RegularExpressionEnabled
{
get { return (bool)GetValue(RegularExpressionEnabledProperty); }
set { SetValue(RegularExpressionEnabledProperty, value); Console.WriteLine("RegularExpressionEnabled:" + (bool)value); }
}
}
然后将此类合并到UserControl中 XAML:
<UserControl x:Class="Libs_ViewLevel.Controls.FilterItemControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Libs_ViewLevel"
xmlns:ctrls="clr-namespace:Libs_ViewLevel.Controls"
x:Name="UserControl">
<Grid x:Name="LayoutRoot" Height="Auto" >
<ctrls:AlphaNumericTextBox x:Name="AlphaNumericTbx"
Grid.ColumnSpan="2"
Text="{Binding AlphaNumericValue}"
RegularExpressionEnabled="{Binding RegExpressionEnabled}" />
</Grid>
</UserControl>
代码隐藏:
public partial class FilterItemControl : UserControl
{
public FilterItemControl()
{
InitializeComponent();
this.DataContext = this;
}
public bool RegExpressionEnabled
{
get { return (bool)GetValue(RegExpressionEnabledProperty); }
set { SetValue(RegExpressionEnabledProperty, value); Console.WriteLine("RegExpressionEnabled:" + (bool)value); }
}
public static readonly DependencyProperty RegExpressionEnabledProperty =
DependencyProperty.Register("RegExpressionEnabled", typeof(bool), typeof(FilterItemControl),
new UIPropertyMetadata(false));
我已将UserControl放在一个Window中,并在此窗口的代码隐藏中放置此语句:txtbox.RegExpressionEnabled = true;
在RegularExpressionEnabled和RegExpressionEnabled中,您可以看到我放置了一个Console.Write()。
RegExpressionEnabled打印到输出屏幕,但它没有到达第二个,RegularExpressionEnabled。
我对AlphaNumericTextBox RegularExpressionEnabled="{Binding RegExpressionEnabled}"
的绑定有问题,有人能指出我正确的方向吗?
答案 0 :(得分:0)
在FilterItemControl背后的代码中,RegExpressionEnabled属性应该是标准属性,因为这是新文本框绑定到的属性。您不需要在FilterItemControl代码中使用依赖项属性,因为您已经在新文本框中使用了它。
现在不是设置txtbox.RegExpressionEnabled = true(实际应该是txtbox.RegularExpressionEnabled = true),而是将RegExpressionEnabled属性设置为true,文本框将绑定到此。
您还需要在RegExpressionEnabled属性的setter中引发PropertyChanged事件以触发数据绑定。