Wpf 在DocumentViewer中禁用文本选择

Wpf 在DocumentViewer中禁用文本选择,wpf,documentviewer,textselection,Wpf,Documentviewer,Textselection,简单的问题。如何在WPF中禁用DocumentViewer的文本选择?这是由查看器显示XPS文档,然后通过鼠标突出显示文本的功能。高亮显示的文本也可以复制,但我已经禁用了。我只是不知道如何禁用突出显示 谢谢 您可以使用IsFocusable=false。但是搜索框也将被禁用…我们通过覆盖DocumentViewer控件中嵌入的ScrollViewer的ControlTemplate解决了这个问题。在“Window.Resources”中插入以下样式: 另一种方法是添加例如dockpanel: &

简单的问题。如何在WPF中禁用DocumentViewer的文本选择?这是由查看器显示XPS文档,然后通过鼠标突出显示文本的功能。高亮显示的文本也可以复制,但我已经禁用了。我只是不知道如何禁用突出显示


谢谢

您可以使用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);