隐藏复选框直到鼠标悬停在 WPF 上

Hide checkbox until mouse over WPF

我是 XAML 的新手,但我希望 CheckBox 选项在我的应用程序中隐藏,直到用户将鼠标悬停在该行上并可以从那里选中该框。这是我目前拥有的,我不确定为什么它不起作用。

<DataGridTemplateColumn.CellTemplate>
   <DataTemplate>
      <CheckBox Name="cbkSelect" 
                IsChecked="{Binding Path=IsSelectedForOrder, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
         <CheckBox.Style>
            <Style TargetType="CheckBox">
               <Setter Property="Visibility" Value="Hidden"/>
               <Style.Triggers>
                  <DataTrigger Binding="{Binding ElementName=cbkSelect, Path=IsMouseOver}" Value="True">
                     <Setter Property="Visibility" Value="Visible"/>
                  </DataTrigger>
               </Style.Triggers>
            </Style>
         </CheckBox.Style>
      </CheckBox>
   </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

如果您只想在用户将鼠标悬停在 时显示 CheckBox,即行的任何单元格,您可以使用 RelativeSource绑定到 IsMouseOver 属性 父行。

<Style TargetType="{x:Type CheckBox}">
   <Setter Property="Visibility" Value="Hidden"/>
   <Style.Triggers>
      <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True">
         <Setter Property="Visibility" Value="Visible"/>
      </DataTrigger>
   </Style.Triggers>
</Style>

如果您希望它仅在用户将鼠标悬停在 CheckBox 列上时显示,您的样式将不起作用,因为您没有在隐藏控件上接收鼠标事件。您可以使用可见的 Border 解决此问题。

<DataGridTemplateColumn>
   <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
         <Border x:Name="cbkBorder" Background="Transparent">
            <CheckBox Name="cbkSelect" 
                      IsChecked="{Binding Path=IsSelectedForOrder, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
               <CheckBox.Style>
                  <Style TargetType="CheckBox">
                     <Setter Property="Visibility" Value="Hidden"/>
                     <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=cbkBorder, Path=IsMouseOver}" Value="True">
                           <Setter Property="Visibility" Value="Visible"/>
                        </DataTrigger>
                     </Style.Triggers>
                  </Style>
               </CheckBox.Style>
            </CheckBox>
         </Border>
      </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>