WPF Extended TextBox дизайн вопрос - PullRequest
0 голосов
/ 03 мая 2010

Я хочу получить из 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 ]

2 голосов
/ 03 мая 2010

Проверьте и посмотрите, переопределяет ли ваш элемент управления DefaultStyleKeyProperty

DefaultStyleKeyProperty.OverrideMetadata

Если это так, он ожидает, что где-нибудь найдет стиль. Удалите это переопределение, и вы должны увидеть нормальное поведение TextBox!

Если этого не произойдет, вы всегда можете основать свой новый стиль Textbox на своем старом стиле, например так:

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

Поместите его в ResourceDictionary где-нибудь, и он должен также работать!

Надеюсь, это поможет!

0 голосов
/ 03 мая 2010

Здесь есть гораздо более простой вариант. Просто используйте DataTrigger, чтобы установить для TextBox's Text значение null (или пустое значение), когда TextBox.IsEnabled имеет значение false:

<Style TargetType="TextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsEnabled}" Value="False">
           <Setter Property="Text" Value="" />
        </DataTrigger>
    </Style.Triggers>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...