我想从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)));
}
}
)));
问题是,如果我编写自定义控件,使用它时不会显示任何内容,但我不想编写自定义模板。我想用原来的。
请问你会怎么做?
答案 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>