Отключение выделения текста в DocumentViewer

Простой вопрос Как отключить выбор текста DocumentViewer в WPF? Это функция, при которой документ XPS отображается зрителем, а затем текст может быть выделен с помощью мыши. Выделенный текст также можно скопировать, но я уже отключил это. Я просто не знаю, как отключить подсветку.

Спасибо!

15.12.2008 12:22:40
4 ОТВЕТА

Вы можете использовать IsFocusable = false. Но окно поиска тоже будет отключено ...

2
31.12.2008 07:10:12
Это на самом деле решает проблему. Для меня это не отключает окно поиска, так что это довольно хорошее решение. Обратите внимание, что свойство называется Focusableи нет IsFocusable.
dotNET 31.01.2020 03:01:36
РЕШЕНИЕ

Мы решили эту проблему, переопределив ControlTemplate ScrollViewer, встроенного в элемент управления DocumentViewer. Вставьте стиль ниже в «Window.Resources»:

<Style TargetType="{x:Type ScrollViewer}"  x:Key="CustomScrollPresenter">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ScrollViewer}">
                <Grid Background="{TemplateBinding Panel.Background}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Rectangle Grid.Column="1" Grid.Row="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
                    <ScrollContentPresenter 
                        PreviewMouseLeftButtonDown="ScrollContentPresenter_PreviewMouseLeftButtonDown"
                        Grid.Column="0" 
                        Grid.Row="0" 
                        Margin="{TemplateBinding Control.Padding}" 
                        Content="{TemplateBinding ContentControl.Content}" 
                        ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" 
                        CanContentScroll="{TemplateBinding ScrollViewer.CanContentScroll}" />
                    <ScrollBar 
                        x:Name="PART_VerticalScrollBar"
                        Grid.Column="1" 
                               Grid.Row="0" 
                               Minimum="0" 
                               Maximum="{TemplateBinding ScrollViewer.ScrollableHeight}" 
                               ViewportSize="{TemplateBinding ScrollViewer.ViewportHeight}" 
                               Value="{Binding Path=VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" 
                               Visibility="{TemplateBinding ScrollViewer.ComputedVerticalScrollBarVisibility}" 
                               Cursor="Arrow" AutomationProperties.AutomationId="VerticalScrollBar" />
                    <ScrollBar 
                        x:Name="PART_HorizontalScrollBar"
                        Orientation="Horizontal" Grid.Column="0" Grid.Row="1" Minimum="0" 
                               Maximum="{TemplateBinding ScrollViewer.ScrollableWidth}" ViewportSize="{TemplateBinding ScrollViewer.ViewportWidth}" Value="{Binding Path=HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource Mode=TemplatedParent}}" Visibility="{TemplateBinding ScrollViewer.ComputedHorizontalScrollBarVisibility}" Cursor="Arrow" AutomationProperties.AutomationId="HorizontalScrollBar" />

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Затем переопределите стиль ScrollViewer с ним в ControlTemplate для DocumentViewer:

   <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>

Затем создайте функцию для атрибута «PreviewMouseLeftButtonDown =» ScrollContentPresenter_PreviewMouseLeftButtonDown », указанного в стиле CustomScrollPresenter.

  private void ScrollContentPresenter_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        e.Handled = true;
    }
2
6.01.2009 01:55:07
Кажется, это действительно отключает выделение текста, но не позволяет мне использовать прокрутку.
juFo 5.09.2017 08:59:33

Другим способом было бы добавить, например, док-панель:

<DockPanel Name="pnlTouchTaker" 
               VerticalAlignment="Bottom" HorizontalAlignment="Left"
               Background="Transparent">
    </DockPanel>

«лежа» над средством просмотра документов и установите его ширину и высоту, равные фактической ширине и высоте содержимого прокрутки, например, в событии загрузки страницы.

Возможно, вам придется добавить дополнительную логику, если вы используете опции масштабирования и горизонтальная панель инструментов становится видимой.

1
4.07.2013 13:38:27

Реализуйте следующий код в части xaml.cs (DocumentViewerInstance x: имя вашего DocumentViewer в вашем xaml.)

DocumentViewerInstance.GetType().GetProperty("IsSelectionEnabled", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(DocumentViewerInstance, false, null);

Вы можете использовать IsFocusable=falseили IsHitTestVisible = falseили обрабатывать любое событие предварительного просмотра (например, в принятом ответе) для отключения выбора, но гиперссылки не будут работать! Если вы установите IsSelectionEnabled = false, выбор будет отключен, но гиперссылки также будут работать. (Предупреждение! IsSelectionEnabled можно изменить на значение true после того, как вы установите false, поэтому вам следует часто проверять значение.)

0
7.09.2018 11:46:52