【问题标题】:CheckBox IsChecked & IsMouseOver复选框 IsChecked 和 IsMouseOver
【发布时间】:2016-04-09 18:09:52
【问题描述】:

我最近做了一些控件设计并想使用它们,但我发现有一个问题。通常复选框有 4 个图像:

  1. 正常时
  2. 鼠标悬停时
  3. 检查时
  4. 当它被选中并且鼠标悬停时

但是 4. State 不存在,我向你展示我到目前为止的表现:

        <ControlTemplate  x:Key="ModernCheckBox" TargetType="{x:Type CheckBox}">
        <StackPanel Orientation="Horizontal">
            <Image x:Name="_Image" Source="CheckBox_Normal.png" Margin="0,0,4,0"/>
            <ContentControl Content="CheckBox"/>
        </StackPanel>
        <ControlTemplate.Triggers>
            <Trigger Property="CheckBox.IsMouseOver" Value="True">
                <Setter TargetName="_Image" Property="Source" Value="CheckBox_NormalHover.png"/>
            </Trigger>
            <Trigger Property="CheckBox.IsChecked" Value="True">
                <Setter TargetName="_Image" Property="Source" Value="CheckBox_Checked.png"/>
            </Trigger>
            <Trigger Property="CheckBox.??" Value="True">
                <Setter TargetName="_Image" Property="Source" Value="CheckBox_CheckedHover.png"/>
            </Trigger>
        </ControlTemplate.Triggers>

到目前为止,我的模板运行良好,但正如您所见,我找不到最后一个状态的方法,所以我在这里寻求帮助!

亲切的问候,

杰克

【问题讨论】:

    标签: c# wpf checkbox


    【解决方案1】:

    您需要使用 MultiTrigger 才能对您的状态 #4 做出反应

    例如

    <MultiTrigger>
        <MultiTrigger.Conditions>
            <Condition Property="IsMouseOver" Value="True"/>
            <Condition Property="IsChecked" Value="True"/>
        </MultiTrigger.Conditions>
        <Setter TargetName="_Image" Property="Source" Value="CheckBox_CheckedHover.png"/>
    </MultiTrigger>
    

    【讨论】:

      【解决方案2】:

      您可以使用 MultiTrigger 来测试多个属性值:

      <MultiDataTrigger>
          <MultiDataTrigger.Conditions>
            <Condition Property="CheckBox.IsMouseOver" Value="True" />
            <Condition Property="CheckBox.IsChecked" Value="True" />
          </MultiDataTrigger.Conditions>
          <Setter TargetName="_Image" Property="Source" Value="CheckBox_CheckedHover.png"/>     
      </MultiDataTrigger>
      

      【讨论】:

        【解决方案3】:

        或者您可以将StaticResource 更改为OptionMark.MouseOver.Glyph,将StaticResource 更改为OptionMark.Pressed.Glyph

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-22
          • 2016-03-20
          • 1970-01-01
          • 2012-04-05
          • 2013-10-27
          • 2018-12-06
          • 2016-04-07
          • 1970-01-01
          相关资源
          最近更新 更多