我是一个C#/ WPF应用程序。在我的Mainwindow.xaml上,我以编程方式加载其他视图。 MainWindow.xaml上有一个checbox。当点击它时,我需要将屏幕上的所有文本框控件设置为只读。 该代码适用于Mainwindow上的控件,但不适用于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}">
答案 0 :(得分:1)
如果您在调试应用程序时查看输出窗口,我怀疑您会看到有关绑定失败的消息:
{Binding Path=IsCheckboxChecked}
在样式中绑定是很棘手的。来源是什么?您可能需要指定ElementName
或RelativeSource
。