我想在WPF(來自C#代碼)中進行不可檢查複選框。只允許取消選中。
我該怎麼做?禁用WPF中的複選框檢查
PS。
寫入事件處理程序單擊事件,在檢查它不可接受後會立即取消選中複選框。
應始終啓用複選框,以便用戶可以認爲複選框可以被檢查。這很奇怪,但它是特定的程序。
我想在WPF(來自C#代碼)中進行不可檢查複選框。只允許取消選中。
我該怎麼做?禁用WPF中的複選框檢查
PS。
寫入事件處理程序單擊事件,在檢查它不可接受後會立即取消選中複選框。
應始終啓用複選框,以便用戶可以認爲複選框可以被檢查。這很奇怪,但它是特定的程序。
<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>
一個簡單的解決方案可能是將IsEnabled屬性綁定到IsChecked屬性。
這是一個很好的解決方案,因爲它也給用戶提供了一個視覺提示,即複選框不再可以使用。 (除了它應該是IsEnabled而不是相反的,IsReadOnly僅適用於TextBoxes)。 – 2012-06-13 19:23:39
IsReadOnly不是wpf複選框的有效屬性 –
好點,編輯 –
如何:
<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
屬性,然後將資源分配給所需的複選框),而無需執行任何特殊操作或更改單個複選框的綁定。
是否可以更改禁用複選框的顏色?如果我可以改變複選框的矩形的顏色,你的解決方案會很好。我需要讓複選框看起來仍然'可檢查'。 –
不,不是沒有實施你自己的控制模板。如果你不想禁用該控件,那麼你唯一的選擇將是有一些代碼隱藏事件處理程序,它決定何時可以或不可以檢查複選框。 – CodingGorilla
如果用戶取消選中該框,他們將能夠再次檢查它? – Dylan