WPF container to turn all child controls to read-only WPF container to turn all child controls to read-only wpf wpf

WPF container to turn all child controls to read-only


You may do this with an attached property that provides value inheritance:

public class ReadOnlyPanel{    public static readonly DependencyProperty IsReadOnlyProperty =        DependencyProperty.RegisterAttached(            "IsReadOnly", typeof(bool), typeof(ReadOnlyPanel),            new FrameworkPropertyMetadata(false,                FrameworkPropertyMetadataOptions.Inherits, ReadOnlyPropertyChanged));    public static bool GetIsReadOnly(DependencyObject o)    {        return (bool)o.GetValue(IsReadOnlyProperty);    }    public static void SetIsReadOnly(DependencyObject o, bool value)    {        o.SetValue(IsReadOnlyProperty, value);    }    private static void ReadOnlyPropertyChanged(        DependencyObject o, DependencyPropertyChangedEventArgs e)    {        if (o is TextBox)        {            ((TextBox)o).IsReadOnly = (bool)e.NewValue;        }        // other types here    }}

You would use it in XAML like this:

<StackPanel local:ReadOnlyPanel.IsReadOnly="{Binding IsChecked, ElementName=cb}">    <CheckBox x:Name="cb" Content="ReadOnly"/>    <TextBox Text="Hello"/></StackPanel>