Как выделить весь текст в TextBox с помощью WPF MVVM? - PullRequest
0 голосов
/ 11 января 2019

У меня есть TextBox на MVCM-разработанном UserControl. Я должен выделить весь текст в TextBox, если в ViewModel выполнены некоторые условия, а также проверить, выделен ли весь текст.
Я много искал, как я могу это реализовать, и, наконец, я попытался использовать присоединенное свойство.

Моя собственность

public static class TextBoxExtension
{
    public static readonly DependencyProperty IsSelectedAllProperty =
        DependencyProperty.RegisterAttached
        (
            "IsSelectedAll",
            typeof(bool?),
            typeof(TextBoxExtension),
            new FrameworkPropertyMetadata(IsSelectedAllChanged) { BindsTwoWayByDefault = true }
        );
    public static bool? GetIsSelectedAll(DependencyObject element)
    {
        if (element is null)
            throw new ArgumentNullException("element");
        return (bool?)element.GetValue(IsSelectedAllProperty);
    }
    public static void SetIsSelectedAll(DependencyObject element, bool? value)
    {
        if (element is null)
            throw new ArgumentNullException("element");
        element.SetValue(IsSelectedAllProperty, value);
    }
    private static void IsSelectedAllChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        TextBox textbox = (TextBox)d;
        bool? oldValue = e.OldValue as bool?;
        bool? newValue = e.NewValue as bool?;
        if (oldValue is null)
        {
            textbox.GotFocus += SetIsSelectedAllProperty;
            textbox.LostFocus += SetIsSelectedAllProperty;
            textbox.SelectionChanged += SetIsSelectedAllProperty;
        }
        if (newValue == true)
        {
            textbox.Focus();
            textbox.SelectAll();
        }
    }
    private static void SetIsSelectedAllProperty(object sender, RoutedEventArgs e)
    {
        TextBox textBox = sender as TextBox;
        textBox.SetValue
        (
            dp: IsSelectedAllProperty,
            value:
                textBox.IsFocused &&
                textBox.SelectedText == textBox.Text
        );
    }
}

Мое текстовое поле из вида:

<TextBox local:TextBoxExtension.IsSelectedAll="{Binding IsSelectedAll}"/>

В большинстве случаев работает отлично, но есть проблема, когда я пытаюсь выделить текст от конца до начала текста с помощью мыши: когда выделение достигает 1-го символа, все выделение немедленно исчезает.

Почему это радует и как я могу это исправить? Пожалуйста, помогите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...