我有一个文档查看器,我在我的 wpf 项目中使用它来显示大约 600 页的 xps 文档报告,效果很好。但从用户的角度来看,我喜欢在滚动查看器上显示当前页码作为工具提示,同时拖动滚动条,说明当前视图中的页码。有点像这样的PDF文件 -
我正在寻找一些想法如何实现这一点。如果无法显示缩略图图像,只需一个当前页码对我来说就足够了。文档查看器中是否对此功能有任何内置支持?
谢谢你的帮助..
我有一个文档查看器,我在我的 wpf 项目中使用它来显示大约 600 页的 xps 文档报告,效果很好。但从用户的角度来看,我喜欢在滚动查看器上显示当前页码作为工具提示,同时拖动滚动条,说明当前视图中的页码。有点像这样的PDF文件 -
我正在寻找一些想法如何实现这一点。如果无法显示缩略图图像,只需一个当前页码对我来说就足够了。文档查看器中是否对此功能有任何内置支持?
谢谢你的帮助..
我找不到类似的东西,IsScrolling
所以我会这样处理:
<Popup Name="docPopup" AllowsTransparency="True" PlacementTarget="{x:Reference docViewer}" Placement="Center">
<Border Background="Black" CornerRadius="5" Padding="10" BorderBrush="White" BorderThickness="1">
<TextBlock Foreground="White">
<Run Text="{Binding ElementName=docViewer, Path=MasterPageNumber, Mode=OneWay}"/>
<Run Text=" / "/>
<Run Text="{Binding ElementName=docViewer, Path=PageCount, Mode=OneWay}"/>
</TextBlock>
</Border>
</Popup>
<DocumentViewer Name="docViewer" ScrollViewer.ScrollChanged="docViewer_ScrollChanged"/>
滚动文档时应显示弹出窗口,然后应在一段时间后淡出。这是在处理程序中完成的:
DoubleAnimationUsingKeyFrames anim;
private void docViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
if (anim == null)
{
anim = new DoubleAnimationUsingKeyFrames();
anim.Duration = (Duration)TimeSpan.FromSeconds(1);
anim.KeyFrames.Add(new DiscreteDoubleKeyFrame(1, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0))));
anim.KeyFrames.Add(new DiscreteDoubleKeyFrame(1, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.5))));
anim.KeyFrames.Add(new LinearDoubleKeyFrame(0, KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1))));
}
anim.Completed -= anim_Completed;
docPopup.Child.BeginAnimation(UIElement.OpacityProperty, null);
docPopup.Child.Opacity = 1;
docPopup.IsOpen = true;
anim.Completed += anim_Completed;
docPopup.Child.BeginAnimation(UIElement.OpacityProperty, anim);
}
void anim_Completed(object sender, EventArgs e)
{
docPopup.IsOpen = false;
}
编辑:该事件也会在通过鼠标滚轮等完成的滚动上触发。您可以将处理程序中的所有内容包装在 中if (Mouse.LeftButton == MouseButtonState.Pressed)
,不是 100% 准确,但是左键单击时谁使用 MouseWheel 滚动?