【问题标题】:Hide checkbox until mouseover and make it stay once checked WPF隐藏复选框直到鼠标悬停并使其在选中 WPF 后保持不变
【发布时间】:2021-02-03 11:27:46
【问题描述】:

复选框是不可见的,直到我将鼠标悬停在我想要的位置上,但现在我希望它在选中后保持可见。我试过实现一个多触发器,但它似乎不起作用:

<DataGridTemplateColumn.CellTemplate>
   <DataTemplate>
      <CheckBox Name="cbkSelect" 
                IsChecked="{Binding Path=IsSelectedForOrder, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
         <CheckBox.Style>
            <Style TargetType="{x:Type CheckBox}">
               <Setter Property="Visibility" Value="Hidden"/>
               <Style.Triggers>
                  <MultiDataTrigger>
                     <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True"></Condition>
                        <Condition Binding="{Binding IsChecked, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True"></Condition>
                     </MultiDataTrigger.Conditions>
                     <MultiDataTrigger.Setters>
                        <Setter Property="Visibility" Value="Visible"/>
                     </MultiDataTrigger.Setters>
                  </MultiDataTrigger>
               </Style.Triggers>
            </Style>
         </CheckBox.Style>
      </CheckBox>
   </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

【问题讨论】:

    标签: wpf xaml checkbox mouseover multidatatrigger


    【解决方案1】:

    MultiDataTrigger 只会在满足所有条件时应用 setter。

    表示当绑定数据满足一组条件时应用属性值或执行操作的触发器。

    除此之外,绑定到DataGridRow 不起作用,因为它没有IsChecked 属性。相反,添加一个作用于关联CheckBoxIsChecked 属性的Trigger

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

    【讨论】:

    • 非常感谢!这样可行!快速跟进问题,如果我想通过更改文本颜色(即未选择的灰色)而不是显示复选框来显示选择/取消选择行,我是否只需更改属性/值组合?
    • @AlexJohnson 这取决于您选择的意思。我猜您的意思是自定义选择,例如CheckBox。为了更改文本颜色,您需要设置Foreground。但是,要在选择 DataGrid 中的行或单元格时也应用此颜色,您需要更改控件模板,因为这会覆盖您在选定状态下的前景色,但这超出了评论的范围回答,因为它需要大量代码。请考虑针对此类后续问题提出单独的问题。
    • 知道了,抱歉!作为一个单独的问题发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    相关资源
    最近更新 更多