VisualStateManager.GoToState не работает для TextBox (UWP) - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь установить VisualState для TextBox через код.

 <TextBox x:Name="txtbox"  Width="438" Height="56" Style="{StaticResource ExtendeTextBoxStyle}"
             PlaceholderText="{x:Bind PlaceholderText, Mode=OneWay}" ></TextBox>

Codebehind

   private static void HasErrorUpdated(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
         EditTextControl textBox = d as EditTextControl;
        Grid sds = textBox.Content as Grid;
        var mytxt = sds.Children.FirstOrDefault() as Control;

        if (textBox != null)
        {
            if (textBox.HasError)
                VisualStateManager.GoToState(mytxt , "InvalidState", true);

            else
                VisualStateManager.GoToState(mytxt, "ValidState", false);
        }
    }

Но это визуальное состояние никогда не активируется. Что здесь не так?

1 Ответ

1 голос
/ 04 мая 2020

VisualStateManager.GoToState не работает для TextBox (UWP)

Пожалуйста, проверьте, был ли вызван GoToState, если нет, я полагаю, вы не реализовали INotifyPropertyChanged интерфейс, я просмотрел ваш предыдущий вопрос . Я обнаружил, что HasError - это DependencyProperty, это означает, что вам нужно связать его со свойством, реализовавшим PropertyChanged обработчик событий. Когда вы вызываете метод OnPropertyChanged(), он отвечает функцией propertyChangedCallback.

public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string name = "")
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private bool _hasError;
public bool HasError
{
    get => _hasError;
    set
    {
        _hasError = value;
        OnPropertyChanged();
    }
}
private void Button_Click(object sender, RoutedEventArgs e)
{
    HasError = !HasError;
}
...