WPF扩展TextBox设计问题

时间:2010-05-03 15:25:27

标签: c# wpf inheritance textbox

我想从System.Windows.Controls.TextBox派生并提供此功能。

IsEnabledProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(
            new PropertyChangedCallback(delegate(DependencyObject o, DependencyPropertyChangedEventArgs e)
            {
                MyTextBox tb = o as MyTextBox;

                if (tb != null && !tb.IsEnabled)
                {
                    tb.SetValue(TextProperty, null);
                    tb.OnLostFocus(new RoutedEventArgs(LostFocusEvent, typeof(MyTextBox)));
                }
            }
            )));

问题是,如果我编写自定义控件,使用它时不会显示任何内容,但我不想编写自定义模板。我想用原来的。

请问你会怎么做?

2 个答案:

答案 0 :(得分:2)

检查并查看您的控件是否覆盖DefaultStyleKeyProperty

DefaultStyleKeyProperty.OverrideMetadata

如果是这种情况,它会期望在某处找到一种风格。删除该覆盖,您应该看到正常的TextBox行为!

如果没有,您可以始终将新文本框样式基于旧样式,如下所示:

<Style TargetType="{x:Type Your:YourTextBox}" BasedOn="{StaticResource {x:Type TextBox}}" />

将它放在某个地方的ResourceDictionary中,它也可以正常工作!

希望这有帮助!

答案 1 :(得分:0)

这里有一个更简单的选择。当TextBox.IsEnabled为false时,只需使用DataTrigger将TextBox的Text设置为null(或为空):

<Style TargetType="TextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsEnabled}" Value="False">
           <Setter Property="Text" Value="" />
        </DataTrigger>
    </Style.Triggers>
</Style>