Wpf 在DocumentViewer中禁用文本选择
简单的问题。如何在WPF中禁用DocumentViewer的文本选择?这是由查看器显示XPS文档,然后通过鼠标突出显示文本的功能。高亮显示的文本也可以复制,但我已经禁用了。我只是不知道如何禁用突出显示Wpf 在DocumentViewer中禁用文本选择,wpf,documentviewer,textselection,Wpf,Documentviewer,Textselection,简单的问题。如何在WPF中禁用DocumentViewer的文本选择?这是由查看器显示XPS文档,然后通过鼠标突出显示文本的功能。高亮显示的文本也可以复制,但我已经禁用了。我只是不知道如何禁用突出显示 谢谢 您可以使用IsFocusable=false。但是搜索框也将被禁用…我们通过覆盖DocumentViewer控件中嵌入的ScrollViewer的ControlTemplate解决了这个问题。在“Window.Resources”中插入以下样式: 另一种方法是添加例如dockpanel: &
谢谢 您可以使用IsFocusable=false。但是搜索框也将被禁用…我们通过覆盖DocumentViewer控件中嵌入的ScrollViewer的ControlTemplate解决了这个问题。在“Window.Resources”中插入以下样式:
另一种方法是添加例如dockpanel:
<DockPanel Name="pnlTouchTaker"
VerticalAlignment="Bottom" HorizontalAlignment="Left"
Background="Transparent">
</DockPanel>
位于documentviewer的“上方”,并将其宽度和高度设置为scrollviewer内容的实际宽度和高度,例如页面加载事件
如果使用缩放选项且水平工具栏可见,则可能需要添加其他逻辑。在xaml.cs部分(DocumentViewerInstance x:xaml中DocumentViewer的名称)中实现以下代码
您可以使用
IsFocusable=false
或ishittevisible=false
或处理任何预览事件(例如在接受的答案中)来禁用选择,但超链接将不起作用!如果将IsSelectionEnabled设置为false,则选择将被禁用,但超链接也将起作用。(警告!设置false后,IsSelectionEnabled可以更改为true值,因此您应该经常检查该值。)这似乎确实禁用了文本选择,但不允许我使用滚动。这实际上解决了问题。对我来说,它也不会禁用searchbox,所以这是一个很好的解决方案。请注意,该属性称为Focusable
,而不是IsFocusable
。
<Style
x:Key="MyDVStyleExtend"
BasedOn="{StaticResource {x:Type DocumentViewer}}"
TargetType="{x:Type DocumentViewer}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DocumentViewer">
<Border BorderThickness="2,2,2,2"
BorderBrush="SlateBlue" Focusable="False">
<Grid Background="{StaticResource GridBackground}"
KeyboardNavigation.TabNavigation="Local">
<Grid.ColumnDefinitions>
<ColumnDefinition Width ="*"/>
</Grid.ColumnDefinitions>
<ScrollViewer Style="{StaticResource CustomScrollPresenter}" Grid.Column ="0"
CanContentScroll="True"
HorizontalScrollBarVisibility="Auto"
x:Name="PART_ContentHost"
IsTabStop="True"/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
private void ScrollContentPresenter_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}
<DockPanel Name="pnlTouchTaker"
VerticalAlignment="Bottom" HorizontalAlignment="Left"
Background="Transparent">
</DockPanel>
DocumentViewerInstance.GetType().GetProperty("IsSelectionEnabled", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(DocumentViewerInstance, false, null);