如何解决在使用模板样式化复选框时保留绑定的问题
设置CheckBox
的样式时遇到问题。我受到原始CheckBox
风格的启发。
问题是,我找不到将原始绑定应用到属性IsSelected
中的方法。当我删除样式时,绑定起作用。我应该在ContentPresenter
里面添加什么来保留CheckBox
绑定?
<DataGridCheckBoxColumn Binding="{Binding IsSelected}" ElementStyle="{StaticResource DataGridCheckBoxStyle}" MinWidth="6">
<Style x:Key="DataGridCheckBoxStyle" TargetType="{x:Type CheckBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CheckBox">
<BulletDecorator Background="Transparent">
<BulletDecorator.Bullet>
<Border x:Name="Border"
Width="13"
Height="13"
CornerRadius="0"
Background="White"
BorderThickness="1"
BorderBrush="{StaticResource Blue}">
<Path Width="8" Height="8"
x:Name="CheckMark"
SnapsToDevicePixels="False"
Stroke="White"
StrokeThickness="2"
Data="M 0 3.5 L 3.5 7 M 3.5 7 L 8 0" />
</Border>
</BulletDecorator.Bullet>
<ContentPresenter Margin="4,0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
RecognizesAccessKey="True"/>
</BulletDecorator>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="false">
<Setter TargetName="CheckMark" Property="Visibility" Value="Collapsed"/>
</Trigger>
<Trigger Property="IsChecked" Value="true">
<Setter TargetName="Border" Property="Background" Value="{StaticResource Blue}" />
</Trigger>
<Trigger Property="IsChecked" Value="{x:Null}">
<Setter TargetName="CheckMark" Property="Data" Value="M 0 7 L 7 0" />
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<!--<Setter TargetName="Border" Property="Background" Value="{StaticResource DarkGray}" />-->
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter TargetName="Border" Property="Background" Value="White" />
<Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource LightGray}" />
<Setter Property="Foreground" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
解决方法
数据网格列始终具有两种样式,即不可编辑的ElementStyle
和EditingElementStyle
。您只能为不可编辑模式创建样式,在CheckBox
切换状态下,不得更改。
由于您的样式允许CheckBox
集中注意力并参与命中测试,因此永远不会进入编辑模式,并且更改后的切换状态不会应用于IsSelected
属性。
为了解决此问题,请根据您的CheckBox
样式为非编辑模式创建单独的样式。这种样式可防止更改切换状态,而是激活编辑模式。
<Style x:Key="DataGridCheckBoxElementStyle" TargetType="{x:Type CheckBox}" BasedOn="{StaticResource DataGridCheckBoxStyle}">
<Setter Property="IsHitTestVisible" Value="False"/>
<Setter Property="Focusable" Value="False"/>
</Style>
在您的列中将两种样式分别应用为ElementStyle
和EditingElementStyle
。
<DataGridCheckBoxColumn Binding="{Binding IsSelected}"
ElementStyle="{StaticResource DataGridCheckBoxElementStyle}"
EditingElementStyle="{StaticResource DataGridCheckBoxStyle}"
MinWidth="6"/>
,
感谢您的回答,我已经测试过了,
我通过添加UpdateSourceTrigger属性解决了我的问题:
compliant_status
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。