使用样式使文本框只读

本文关键字:只读 样式 文本 | 更新日期: 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}

在样式中绑定是很棘手的。来源是什么?您可能需要指定ElementNameRelativeSource