首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PreviewMouseLeftButtonDown预防SelectionChanged事件

PreviewMouseLeftButtonDown预防SelectionChanged事件
EN

Stack Overflow用户
提问于 2011-06-16 15:07:32
回答 1查看 3K关注 0票数 1

我把ListBoxItems放在画布上了。我可以使用ScrollViewer在画布上拖动和滚动视图,并使用一些鼠标事件。这些鼠标事件似乎覆盖了嵌套在SelectionChanged中的ListBox的ListBox事件,或者选择永远不会进行,因为鼠标事件在ListBox之前捕获了单击。如果有人对这个问题有任何解决办法,我们将不胜感激。谢谢你的时间,这是我的密码。

XAML:

代码语言:javascript
复制
        <ScrollViewer x:Name="objScrollViewer"
                      Grid.Row="0"
                      Grid.Column="1"
                      VerticalScrollBarVisibility="Hidden"
                      HorizontalScrollBarVisibility="Hidden"
                      HorizontalAlignment="Stretch"
                      VerticalAlignment="Stretch"
                      MouseLeftButtonUp ="OnMouseLeftButtonUp"
                      PreviewMouseLeftButtonUp ="OnMouseLeftButtonUp"
                      PreviewMouseLeftButtonDown="OnPreviewMouseLeftButtonDown"
                      PreviewMouseMove="OnPreviewMouseMove"
                      PreviewMouseUp="OnPreviewMouseUp"
                      ScrollChanged="OnScrollViewerScrollChanged">

            <ListBox x:Name="objCoreViewer"
                     ItemsSource="{Binding ItemsSource}"
                     Background="Transparent"
                     SelectionChanged="objCoreViewer_SelectionChanged"
                     ItemTemplateSelector="{DynamicResource CoreViewerDataTemplateSelector}"
                     ItemContainerStyleSelector="{DynamicResource ItemContainerStyleSelector}"
                     PreviewMouseWheel="objCoreViewer_PreviewMouseWheel">

                <!-- Core Map Canvas -->

                <ListBox.ItemsPanel>

                    <ItemsPanelTemplate>
                        <local:CoreViewerCanvas x:Name="objCoreViewerCanvas"
                                Background="Transparent"
                                ClipToBounds="True">
                            <local:CoreViewerCanvas.LayoutTransform>
                                <ScaleTransform ScaleX="{Binding Path=Value, ElementName=ZoomSlider}"
                                                ScaleY="{Binding Path=Value, ElementName=ZoomSlider}" />
                            </local:CoreViewerCanvas.LayoutTransform>
                        </local:CoreViewerCanvas>
                    </ItemsPanelTemplate>

                </ListBox.ItemsPanel>

            </ListBox>

        </ScrollViewer>

C#:

这从来没有被称为

代码语言:javascript
复制
    private void objCoreViewer_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
    }

,这确实被称为

代码语言:javascript
复制
    private void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var mousePos = e.GetPosition(objScrollViewer);
        if (mousePos.X <= objScrollViewer.ViewportWidth && mousePos.Y < 
            objScrollViewer.ViewportHeight)
        {
            objScrollViewer.Cursor = Cursors.SizeAll;
            lastDragPoint = mousePos;
            Mouse.Capture(objScrollViewer);
        }
    }

编辑1:

我将ScrollViewer事件属性从PreviewMouseLeftButtonDown更改为MouseLeftButtonDown,它现在触发SelectionChanged事件方法,但ScrollViewer现在没有滚动,因为MouseLeftButtonDown事件方法从未被捕获。叹气!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-17 11:16:13

将鼠标事件方法更改为:

代码语言:javascript
复制
    private void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var mousePos = e.GetPosition(objScrollViewer);
        if (mousePos.X <= objScrollViewer.ViewportWidth && mousePos.Y <
            objScrollViewer.ViewportHeight)
        {
            objScrollViewer.Cursor = Cursors.SizeAll;
            lastDragPoint = mousePos;
            Mouse.Capture(objScrollViewer);
        }

        FrameworkElement ctrl = (e.OriginalSource as FrameworkElement);
        if (ctrl != null)
        {
            switch (ctrl.DataContext.GetType().ToString())
            {
                case "GE.GNF.ACUMEN.Library.SIMULATOR_BUNDLE_NODAL_DATA":
                    objCoreViewer.SelectedItem = ctrl.DataContext as SIMULATOR_BUNDLE_NODAL_DATA;
                    break;
                case "GE.GNF.ACUMEN.Library.SIMULATOR_CONTROL_BLADE_NODAL_DATA":
                    objCoreViewer.SelectedItem = ctrl.DataContext as SIMULATOR_CONTROL_BLADE_NODAL_DATA;
                    break;
                default:
                    break;
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6374097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档