我想在WPF中检查checkbox(来自C#代码)是不可能的。只允许取消选中。我该怎么做呢?PS。在Click event上编写事件处理程序,在选中复选框后立即取消选中它是不可接受的。
checkbox
Click event
[edit]
复选框应始终启用,以便用户可以认为复选框可以选中。很奇怪,但这是一个特殊的节目。
fcy6dtqo1#
<CheckBox Content="Checkbox" IsEnabled="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}" />
字符串在被告知复选框总是必须看起来处于可选中状态(即使它不是)之后进行编辑。下面是一个工作示例:
<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>
型解决办法很简单。我只是创建了当前复选框模板的副本并删除了:
<Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> </Trigger>
型
brc7rcf02#
不如这样:
<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>
字符串这种方法的好处是可以应用于所有(按原样)或多个(如果应用x:Key属性,然后将资源分配给所需的复选框),而不需要执行任何特殊操作或更改单个复选框的绑定。
x:Key
tquggr8v3#
一个简单的解决方案是将IsEnabled属性绑定为等于IsChecked属性。
to94eoyn4#
若要使禁用的复选框的可见性与启用了禁用属性的复选框的可见性相似,请在触发器中将不透明度设置为
<CheckBox.Resources> <Style TargetType="CheckBox"> <Style.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" Value="1"/> </Trigger> </Style.Triggers> </Style> </CheckBox.Resources>
字符串
4条答案
按热度按时间fcy6dtqo1#
字符串
在被告知复选框总是必须看起来处于可选中状态(即使它不是)之后进行编辑。下面是一个工作示例:
型
解决办法很简单。我只是创建了当前复选框模板的副本并删除了:
型
brc7rcf02#
不如这样:
字符串
这种方法的好处是可以应用于所有(按原样)或多个(如果应用
x:Key
属性,然后将资源分配给所需的复选框),而不需要执行任何特殊操作或更改单个复选框的绑定。tquggr8v3#
一个简单的解决方案是将IsEnabled属性绑定为等于IsChecked属性。
to94eoyn4#
若要使禁用的复选框的可见性与启用了禁用属性的复选框的可见性相似,请在触发器中将不透明度设置为
字符串