【发布时间】:2011-10-06 12:06:04
【问题描述】:
我有一个 WPF 数据网格,我在其中为复选框创建了一个 ControlTemplate 来表示 bool? 类型。
我希望复选框/控件模板对用户只读,但能够更改值
这是模板:
<ControlTemplate x:Key="checkboxTemplate" TargetType="CheckBox">
<Grid Background="{TemplateBinding Background}" Height="{TemplateBinding Height}">
<Rectangle x:Name="r" Height="10" Width="40" HorizontalAlignment="Center" VerticalAlignment="Center" RadiusX="4" RadiusY="4"></Rectangle>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="CheckBox.IsChecked" Value="True">
<Setter Property="Fill" Value="#FF66D660" TargetName="r"></Setter>
</Trigger>
<Trigger Property="CheckBox.IsChecked" Value="False">
<Setter Property="Fill" Value="#FFD50005" TargetName="r"></Setter>
</Trigger>
<Trigger Property="CheckBox.IsChecked" Value="{x:Null}">
<Setter Property="Fill" Value="SlateGray" TargetName="r"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
这是数据网格中的实现:
<DataGridTemplateColumn SortMemberPath="IsReady" Header="Ready" CanUserSort="True" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsReady, Mode=OneWay}" HorizontalAlignment="Center" Template="{StaticResource checkboxTemplate}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
【问题讨论】:
-
您希望您的 CheckBox 为 ReadOnly,但您希望用户能够更改它的 Checked 值?那你为什么要它 ReadOnly 呢?只是为了风格?
-
@Rachel:对用户只读,可从代码编辑。
-
@jberger 我以为您是 OP,所以根据您的评论发布了答案。现在意识到你不是,所以答案可能不适用于他的情况。
标签: wpf mvvm controltemplate