首页 > 解决方案 > WPF 控件模板中的 ScrollViewer 不会触发 MouseLeftButtonUp

问题描述

在 WPF 和 C# 中,我试图为文档查看器的控件模板中包含的 ScrollViewer 设置鼠标拖动滚动功能。问题:我无法让 MouseLeftButtonEvent 触发。

它基本上是默认的 DocumentViewer 模板,修改了一些功能。这是 XAML 中的大纲:

<Style x:Key="DocumentViewerStyle1" BasedOn="{x:Null}" TargetType="{x:Type DocumentViewer}">
<!--...—&gt;
    <Setter Property="ContextMenu" Value="{x:Null}" />  <!--So does not mess up right click, if I use that-->
<!--...-->
    <ControlTemplate TargetType="{x:Type DocumentViewer}">
<!--...-->
        <ScrollViewer x:Name="PART_ContentHost" CanContentScroll="True"
            IsHitTestVisible="True" HorizontalScrollBarVisibility="Auto" 
            Grid.Row="1" Loaded ="OnScrollViewerLoaded" />
        <DockPanel Grid.Row="1" >
<!-...-->
</ControlTemplate>
</Style>


我在后面的代码中使用以下代码,以便可以访问 ScrollViewer。如果在下面的方法中将“左”更改为“右”,它可以完美地工作,但当然是用鼠标右键而不是左键。

    public partial class PrintPreview : Window
    {
        private ScrollViewer nomad;

等和

private void OnScrollViewerLoaded(object sender, RoutedEventArgs e)
{
    nomad = (ScrollViewer)sender;
    nomad.AddHandler(MouseLeftButtonDownEvent, new MouseButtonEventHandler(OnMouseButtonDown), true);
    nomad.AddHandler(MouseLeftButtonUpEvent, new MouseButtonEventHandler(OnMouseButtonUp), true);
    nomad.AddHandler(MouseMoveEvent, new MouseEventHandler(OnMouseMove), true);
}

例如, OnMouseButtonUp 事件处理程序是

private void OnMouseButtonUp(object sender, MouseButtonEventArgs e)
{
    nomad.Cursor = Cursors.IBeam;
    nomad.ReleaseMouseCapture();
}

尝试了各种在这里找到的东西:对我的三个鼠标事件使用预览事件没有帮助。为 ScrollViewer 设置 Focusable="False" 或为其设置背景没有帮助。有什么建议么?谢谢!

标签: c#wpf

解决方案


推荐阅读