c# - WPF 控件模板中的 ScrollViewer 不会触发 MouseLeftButtonUp
问题描述
在 WPF 和 C# 中,我试图为文档查看器的控件模板中包含的 ScrollViewer 设置鼠标拖动滚动功能。问题:我无法让 MouseLeftButtonEvent 触发。
它基本上是默认的 DocumentViewer 模板,修改了一些功能。这是 XAML 中的大纲:
<Style x:Key="DocumentViewerStyle1" BasedOn="{x:Null}" TargetType="{x:Type DocumentViewer}">
<!--...—>
<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" 或为其设置背景没有帮助。有什么建议么?谢谢!
解决方案
推荐阅读
- powershell - 有没有办法从 Powershell 抑制所有命令行输出,包括错误
- javascript - 如何在 IE10 中为数据集变量赋值?
- java - 使用 fireIntervalAdded() 方法在 JList(使用 JScrollPane)上显示 Person 类型对象
- reactjs - 在 react-redux 中将对象添加到嵌套数组
- mysql - 如何在表中添加新列作为主键?
- python - 更改 csv.DictReader 类型中字典键的值
- github - 如何将您的 github 存储库包含在 gradle 依赖项中
- python - 使用终端访问 Pycharms 虚拟环境
- python - 如何在我们的 MIP 问题中使用 or-tools 设置像 y = max(x1,x2,x3) 这样的等式约束?
- powershell - Powershell:更新哈希表中的字符串