【问题标题】:Increase FontSize for hovered element in WPF ListBox增加 WPF ListBox 中悬停元素的 FontSize
【发布时间】:2010-12-13 14:47:05
【问题描述】:

我希望我悬停在 ListBox 中的项目将其字体大小增加到 18,以便在用户浏览项目时获得一种“滚动效果”。我不知道该怎么做。我的列表框是这样的

<ListBox Name="ListBox" ItemsSource="{Binding MyList}" DisplayMemberPath="Property1">

谢谢

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    您应该能够使用触发器来执行此操作。像这样的

    <ListBox Name="ListBox" ItemsSource="{Binding MyList}" DisplayMemberPath="Property1">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="TextBlock.FontSize" Value="18"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
    

    【讨论】:

      【解决方案2】:

      Meleak 的回答是如何按照您的要求去做。但是您会发现,当您更改其中一个成员的字体大小时,整个列表框都被布置了,这可能是非常不受欢迎的。您可以尝试应用缩放变换,而不是设置字体大小:

      <ListBox.ItemContainerStyle>
          <Style TargetType="ListBoxItem">
              <Style.Triggers>
                  <Trigger Property="IsMouseOver" Value="True">
                      <Setter Property="RenderTransform">
                        <Setter.Value>
                          <ScaleTransform ScaleX="2" ScaleY="2"/>
                        </Setter.Value>
                      </Setter>
                  </Trigger>
              </Style.Triggers>
          </Style>
      </ListBox.ItemContainerStyle>
      

      由于这是RenderTransform(而不是LayoutTransform),它不会影响列表框的布局。还有其他问题(例如,您需要处理项目的背景,因为它们在大小翻倍时会重叠),但值得尝试。

      【讨论】:

      • 感谢您的建议!但是,我在使用这个时遇到了一些严重的重叠(就像你提到的那样)
      • 是的,您可能会发现,为了使其正常工作,您需要将模板中的顶级元素设置为 Border 和不透明的 Background。虽然这样做的好处是,当鼠标悬停在项目上时,您还可以执行诸如使 BorderThickness 非零之类的操作。如果你玩这个,你可以获得一些非常好的效果。
      • 我一定会这样做的!再次感谢您的回答
      猜你喜欢
      • 2011-04-20
      • 2015-12-09
      • 2014-08-28
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 2021-08-24
      • 2012-01-19
      • 2022-12-05
      相关资源
      最近更新 更多