WPF:使ListViewItem ToolTip跟随鼠标(MouseMove)

时间:2013-11-14 18:06:20

标签: wpf tooltip listviewitem mousemove

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

这对我很有用。但是,我似乎无法弄清楚如何将此方法应用于ListViewItem。以下是我的listview的一个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>

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

1 个答案:

答案 0 :(得分:1)

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

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:在后面的代码中访问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时才有效,在我的情况下,这不是必需的。