【问题标题】:WPF: Make ListViewItem ToolTip follow mouse (MouseMove)WPF:使 ListViewItem 工具提示跟随鼠标(MouseMove)
【发布时间】:2013-11-14 18:06:19
【问题描述】:

我发现 a solution 让工具提示跟随光标/鼠标。

这对我来说非常有效。但是,我似乎无法弄清楚如何将此方法应用于 ListViewItem。这是我的列表视图的 XAML 之一的示例:

<ListView Name="lvBoxes" FontSize="9" Margin="0,0,0,5" Width="125" 
                ItemsSource="{Binding}" 
                SelectionChanged="lvBoxes_SelectionChanged" 
                MouseLeftButtonUp="lvBoxes_MouseLeftButtonUp">
    <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                    <EventSetter Event="MouseMove" Handler="lvBoxesItem_MouseMove" />
                    <Style.Triggers>
                            <DataTrigger Binding="{Binding Verified}" Value="True">
                                    <Setter Property="Background" Value="LightGreen" />
                            </DataTrigger>
                    </Style.Triggers>
            </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
            <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Boxnum}" Header="BOX#" Width="50" />
                    <GridViewColumn DisplayMemberBinding="{Binding Qty}" Header="QTY" Width="50" />
            </GridView>
    </ListView.View>

我尝试将&lt;Setter x:Name="ttBox" Property="ToolTip" Value="A Tooltip" /&gt; 添加到&lt;Style&gt;,但我无法在后面的代码中引用(在此示例中)ttBox

【问题讨论】:

  • 我手上没有开发环境,所以只能给你一些提示。首先,你应该为listview定义ItemDataTemplate,创建你的“按钮”,在mousemove处理程序中,sender参数会有所帮助你找到tooltip control((sender as button).ToolTip),然后你可以设置它的位置。
  • 我想要的不是Button,而是ListViewItem。但是,您走在正确的轨道上,感谢您抽出宝贵时间发表评论。请参阅下面的答案(直到今天我才能发布。)

标签: wpf tooltip listviewitem mousemove


【解决方案1】:

我最初链接到的讨论让我尝试访问后面代码中的ListViewItem.ToolTip,如下所示(假设我在最初发布的 XAML &lt;style&gt; 部分中包含了&lt;Setter x:Name="ttBox" Property="ToolTip" Value="A Tooltip" /&gt;):

private void lvBoxesItem_MouseMove(object sender, MouseEventArgs e)
{
    ttBox.Placement = System.Windows.Controls.Primitives.PlacementMode.Relative;
    ttBox.HorizontalOffset = e.GetPosition((IInputElement)sender).X + 10;
    ttBox.VerticalOffset = e.GetPosition((IInputElement)sender).Y + 10;    
}

我发现虽然我无法通过 x:Name 在后面的代码中访问ToolTip,但我可以如下修改我的代码以达到我想要的效果(这需要您没有在 XAML 中设置 ToolTip 属性):

ToolTip tt = new ToolTip(); // Initialized with the Window

private void lvBoxesItem_MouseMove(object sender, MouseEventArgs e)
{
    ListViewItem lvItem = sender as ListViewItem;
    lvItem.ToolTip = tt;
    tt.Content = "Sample ToolTip Text";
    tt.Placement = System.Windows.Controls.Primitives.PlacementMode.Relative;
    tt.HorizontalOffset = e.GetPosition((IInputElement)sender).X + 10;
    tt.VerticalOffset = e.GetPosition((IInputElement)sender).Y + 10;    
}

但是,我应该注意,这仅在您不需要/不想将数据直接绑定到您的 ToolTip 时才有效,在我的情况下,这不是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多