2

我找到了一个让工具提示跟随光标/鼠标的解决方案。

这对我来说非常有效。但是,我似乎无法弄清楚如何将此方法应用于 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>

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

4

1 回答 1

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;    
}

我发现虽然我无法ToolTip在后面的代码中访问 by x:Name ,但我可以如下修改我的代码以达到我正在寻找的效果(这要求您不要设置ToolTipXAML 中的属性):

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,在我的情况下,这不是必需的。

于 2013-11-15T14:08:36.660 回答