c# - VisualStateManager.GoToState 不适用于 TextBox (UWP)
问题描述
我正在尝试通过代码设置 TextBox 的 VisualState。
<TextBox x:Name="txtbox" Width="438" Height="56" Style="{StaticResource ExtendeTextBoxStyle}"
PlaceholderText="{x:Bind PlaceholderText, Mode=OneWay}" ></TextBox>
代码隐藏
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);
}
}
但是这种视觉状态永远不会被激活。这里有什么问题?
解决方案
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;
}
推荐阅读
- google-sheets - 如何将数据从一个电子表格导入另一个 Google 表格?
- c# - 获取数组中数字的匹配索引
- apache-spark - 列名更改和数据类型更改时如何读取 Spark DF 中的数据
- c - 重复调用 inet_ntop() 函数
- python - 访问烧瓶模板中由外键连接的表中的值
- python-3.x - 如何使用授权 API 设置部分身份验证
- go - Gorm extra where 1 <> 1 in many2many
- postgresql - PostgreSQL 计算拆分后的前缀组合
- asp.net-core - .Net Core 2.2 File.ReadAllBytes(fileName) 为 UNC 路径抛出 System.UnauthorizedAccessException
- python - 将时间序列数据提供给有状态 LSTM 的正确方法?