将鼠标悬停在组合框项目上时如何更改标签文本?

时间:2018-07-28 01:04:59

标签: c# wpf

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

例如pic 1

当鼠标悬停在某个项目上但没有选择它时,我希望标签更改为与鼠标悬停在该项目上相同的文本。 更改我要做的文字

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

但是当鼠标悬停在某个项目上时找不到方法,也许我以错误的方式进行了谷歌搜索。 有人有解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果是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>