使用样式使文本框只读
本文关键字:只读 样式 文本 | 更新日期: 2023-09-27 18:16:33
我有一个c#/WPF应用程序。在我的主窗口。xaml,我以编程方式加载其他视图。在mainwindow .xaml上有一个复选框,当它被点击时,我需要将屏幕上的所有文本框控件设置为只读。该代码适用于主窗口上的控件,但不适用于AView.xaml
上的文本框。我在这里错过了什么?或者是否有其他方法可以实现此功能?
谢谢。
下面是我的代码:
MainWindow.xaml:
<CheckBox IsChecked="{Binding IsCheckboxChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<ContentPresenter Content="{Binding CurrentViewModel}" >
<ContentPresenter.Resources>
<DataTemplate DataType="{x:Type ViewModel:VModelA}" >
<Views:AView/>
</DataTemplate>
</ContentPresenter>
MainWindowResources.xaml:
<Style TargetType="TextBox" x:Key="ReadOnlyStyle">
<Setter Property="IsReadOnly" Value="{Binding Path=IsCheckboxChecked}"/>
</Style>
<Style TargetType="TextBox" x:Key="ReadOnlyStyleChild">
<Setter Property="IsReadOnly" Value="{Binding Path=IsCheckboxCheckedChild}"/>
</Style>
MainWindowViewModel.cs
private static MainWindowViewModel _instance = new MainWindowViewModel();
public static MainWindowViewModel Instance
{
get {
return _instance;
}
}
public bool IsCheckboxChecked
{
get {
return m_isCheckboxChecked;
}
set
{
m_isCheckboxChecked = value;
OnPropertyChanged("IsCheckboxChecked");
}
}
VModelA.cs:
public bool IsCheckboxCheckedChild
{
get {
return MainWindowViewModel.Instance.IsCheckboxChecked;
}
}
AView.xaml
<TextBox Style="{DynamicResource ReadOnlyStyleChild}">
如果你在调试应用程序时查看输出窗口,我怀疑你会看到关于this的绑定失败的消息:
{Binding Path=IsCheckboxChecked}
在样式中绑定是很棘手的。来源是什么?您可能需要指定ElementName
或RelativeSource