Disable checkbox check in WPF

I want to make it impossible to check checkbox in WPF (from C # code). Only unchecking is allowed.
How can i do this?

PS .
Writing an event handler in the Click Event , which will immediately clear the checkbox after verifying that this is unacceptable.

[edit]
The flag must always be on so that the user can think that the flag can be checked. This is strange, but it is a specific program.

+4
source share
3 answers
<CheckBox Content="Checkbox" IsEnabled="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" /> 

Edit after you are informed that the flag should always look in the check state, even if it is not. Here is a working example:

 <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" x:Class="WpfTest.MainWindow" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <ControlTemplate x:Key="DeceptiveCheckbox" TargetType="{x:Type CheckBox}"> <BulletDecorator Background="Transparent" SnapsToDevicePixels="True"> <BulletDecorator.Bullet> <Microsoft_Windows_Themes:BulletChrome BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" IsChecked="{TemplateBinding IsChecked}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}"/> </BulletDecorator.Bullet> <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </BulletDecorator> <ControlTemplate.Triggers> <Trigger Property="HasContent" Value="True"> <Setter Property="FocusVisualStyle"> <Setter.Value> <Style> <Setter Property="Control.Template"> <Setter.Value> <ControlTemplate> <Rectangle Margin="14,0,0,0" SnapsToDevicePixels="True" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/> </ControlTemplate> </Setter.Value> </Setter> </Style> </Setter.Value> </Setter> <Setter Property="Padding" Value="4,0,0,0"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Window.Resources> <Grid> <CheckBox Content="CheckBox" IsEnabled="{Binding IsChecked, RelativeSource={RelativeSource Self}}" Template="{StaticResource DeceptiveCheckbox}" /> </Grid> </Window> 

The fix was simple. I just made a copy of the current checkbox template and deleted:

 <Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> </Trigger> 
+9
source

An easy solution would be to bind the IsEnabled property to the IsChecked property.

+2
source

How about this:

 <Grid> <Grid.Resources> <Style TargetType="CheckBox"> <Style.Triggers> <Trigger Property="IsChecked" Value="False"> <Setter Property="IsEnabled" Value="False" /> </Trigger> </Style.Triggers> </Style> </Grid.Resources> <CheckBox IsChecked="True" /> </Grid> 

This approach has an advantage when applied to all (as it is) or to many (if you apply the x:Key attribute and then assign the resource to the required flags) without having to do anything special or change the bindings of individual flags.

+2
source

All Articles