繁体   English   中英

获取和 Select 从 ListBox_PreviewMouseLeftButtonUp 事件单击的 ListBoxItem

[英]Get and Select the ListBoxItem clicked from ListBox_PreviewMouseLeftButtonUp event

我有一个 ListBox,它通过按住鼠标左键拖动来水平滑动其 ScrollViewer。

private ScrollViewer scrollViewer;
private Point scrollMousePoint = new Point();
private double horizontalOffset = 1;

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    Border border = (Border)VisualTreeHelper.GetChild(myListBox, 0);
    scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
    // This works
}

private void myListBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    scrollMousePoint = e.GetPosition(scrollViewer);
    horizontalOffset = scrollViewer.HorizontalOffset;
    scrollViewer.CaptureMouse();
    // This works
}

private void myListBox_PreviewMouseMove(object sender, MouseEventArgs e)
{
    if (scrollViewer.IsMouseCaptured)
        scrollViewer.ScrollToHorizontalOffset(horizontalOffset + (scrollMousePoint.X - e.GetPosition(scrollViewer).X));
    // This works
}

private void myListBox_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    scrollViewer.ReleaseMouseCapture();
    
    if (scrollMousePoint == Mouse.GetPosition(scrollViewer))
    {
        // Click
        // Here I want to get and select the ListBoxItem that was pressed.
    }
}

我想得到和 select 被点击的 ListBoxItem 。

为了确定它是否是没有移动的点击,我比较了保存在 PreviewMouseLeftButtonDown 和 PreviewMouseLeftButtonUp 事件中的 position 是否相同。

这里是 go:

        private void myListBox_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            scrollViewer.ReleaseMouseCapture();

            if (scrollMousePoint == Mouse.GetPosition(scrollViewer))
            {
                ListBox listBox = sender as ListBox;
                if (listBox != null)
                {
                    var element = VisualTreeHelper.HitTest(listBox, scrollMousePoint).VisualHit;
                    if (element.GetType() != typeof(ScrollViewer))
                    {
                        while (element.GetType() != typeof(ListBoxItem))
                            element = VisualTreeHelper.GetParent(element);

                        (element as ListBoxItem).IsSelected = true;
                    }
                }
            }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM