【问题标题】:how to change label text when I hover mouse over a combobox item?当我将鼠标悬停在组合框项目上时如何更改标签文本?
【发布时间】:2018-07-28 12:40:39
【问题描述】:

如何根据鼠标悬停在组合框项目上的位置更改标签文本?

例如pic 1

当我的鼠标悬停在一个项目上,但没有选择它时,我希望标签更改为与鼠标悬停的项目相同的文本.. 更改我这样做的文本

 flatLabel2.Text = flatComboBox1.SelectedItem.ToString().ToUpper();

但是当鼠标悬停在一个项目上时找不到怎么做,也许我用错误的方式搜索。 有人有解决办法吗?

【问题讨论】:

  • windows 窗体,用计时器轻松修复

标签: c# wpf


【解决方案1】:

如果它是 WPF 项目,正如我之前发现的,您必须使用 DependencyPropertyDescriptor 来触发项目上的 MouseOver 事件,如下所示:

DependencyPropertyDescriptor dpd;
private void ComboBox_Loaded(object sender, RoutedEventArgs e)
{
    ComboBoxItem cmb = sender as ComboBoxItem;
    dpd = DependencyPropertyDescriptor
        .FromProperty(IsMouseOverProperty, typeof(ComboBoxItem));
    if (dpd != null)
        dpd.AddValueChanged(cmb, OnIsMouseOver);

}

private void ComboBox_Unloaded(object sender, RoutedEventArgs e)
{
    if (dpd != null)
        dpd.RemoveValueChanged(cmb, OnIsMouseOver);

}

private void OnIsMouseOver(object sender, EventArgs e)
{
    ComboBoxItem cmb = sender as ComboBoxItem;
    if (cmb.IsMouseOver)
    {
        //do something...
    }
}

并在视图中:

<ComboBox x:Name="cmb">
    <ComboBox.ItemContainerStyle>
        <Style TargetType="ComboBoxItem">
            <EventSetter Event="Loaded" Handler="ComboBox_Loaded" />
            <EventSetter Event="Unloaded" Handler="ComboBox_Unloaded" />
        </Style>
    </ComboBox.ItemContainerStyle>
</ComboBox>

【讨论】:

  • 是的,这是个好技巧!如果你想减少线程数,你可以使用 CompositionTarget.Rendering
  • 哇!不知道你能做到这一点。虽然事实证明它是 WinForms
猜你喜欢
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 2014-05-13
  • 2013-04-28
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多