2008-12-15 14 views
5

Pregunta simple. ¿Cómo se desactiva la selección de texto de DocumentViewer en WPF? Esta es la característica donde el visor muestra un documento XPS y luego el texto se puede resaltar con el mouse. El texto resaltado también se puede copiar, pero ya lo he desactivado. Simplemente no sé cómo deshabilitar el resaltado.Desactivación de la selección de texto en DocumentViewer

Gracias!

Respuesta

2

Hemos resuelto esto anulando la plantilla de control del ScrollViewer incrustado en el control DocumentViewer. Inserte el estilo de continuación en "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> 

Entonces obligar un estilo de ScrollViewer con él en el ControlTemplate para 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> 

continuación, crear una función para el "PreviewMouseLeftButtonDown =" ScrollContentPresenter_PreviewMouseLeftButtonDown "" atributo indicado en el estilo CustomScrollPresenter.

private void ScrollContentPresenter_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     e.Handled = true; 
    } 
+0

Esto parece deshabilitar la selección de texto, pero no me permite usar el desplazamiento. – juFo

0

puede usar IsFocusable = false. Pero el cuadro de búsqueda también estará deshabilitado ...

1

Otra forma sería agregar, p. un DockPanel:

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

mentir "por encima" del DocumentViewer y establecer anchura y la altura Está a la anchura y la altura reales del contenido ScrollViewer en, por ejemplo evento de carga de página.

Es posible que tenga que agregar lógica adicional si usa las opciones de zoom y la barra de herramientas horizontal se hace visible.

Cuestiones relacionadas