【问题标题】:c# wpf is there a mouse hover event for ComboBoxc# wpf ComboBox是否有鼠标悬停事件
【发布时间】:2017-10-24 13:06:37
【问题描述】:

当用户将鼠标悬停在组合框的项目上时,我正在尝试更新一些值。一个例子是:

此 ComboBox 的选定项当前为 40。但是在这里我希望在用户将鼠标指针移动到 66 的值上时触发一个事件。我正在尝试的操作是动态更改字体大小当用户将鼠标悬停在此 ComboBox 内的数字上时,另一个 TextBox。 感谢您的帮助。

【问题讨论】:

  • 当然可以。为comboBox´s 元素实现悬停方法。只需在 XAML 中绑定事件并在代码中实现该方法。顺便说一句,这不是 SO 的工作方式。在提出要求之前,先进行一些研究并自行尝试。
  • 这个悬停事件的名称是什么?是 myComboBox.Items.CurrentChanging 还是其他东西?还有如何捕捉当前悬停的项目?
  • @alikerimerkan CurrentChanging 根据名称听起来不太可能。鼠标事件的名称中包含“鼠标”一词。你可以自己查这个。您可以搜索 MSDN 文档,或者使用智能感知查看属性。事件旁边有小闪电图标。
  • google.de/… 努力吧。这就是编程的意义所在。

标签: c# wpf user-interface combobox mouseevent


【解决方案1】:

有点不清楚你要做什么,但如果你想在鼠标移到ComboBoxItem 上时执行一些操作,你可以使用ItemContainerStyleDependencyPropertyDescriptor

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>

【讨论】:

  • 这有助于在用户将鼠标悬停在组合框的值上时响应事件。但是我实现了单击事件处理程序,例如:cmb.PreviewMouseLeftButtonDown += OnMouseLeftBtnDown;。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-08-17
  • 2011-04-15
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多