2008-12-15 12 views
5

Einfache Frage. Wie deaktivierst du die Textauswahl von DocumentViewer in WPF? Dies ist die Funktion, bei der ein XPS-Dokument vom Betrachter angezeigt wird und Text mit der Maus hervorgehoben werden kann. Der markierte Text kann auch kopiert werden, aber ich habe dies bereits deaktiviert. Ich weiß einfach nicht, wie man die Hervorhebung deaktiviert.Deaktivieren der Textauswahl in DocumentViewer

Danke!

Antwort

2

Wir haben dies gelöst, indem wir die ControlTemplate des in das DocumentViewer-Steuerelement eingebetteten ScrollViewer überschrieben haben. Legen Sie die Art unten in „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> 

Dann mit dem Stil von Scroll außer Kraft setzen im Control für Document:

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

Dann eine Funktion für das „Preview =“ ScrollContentPresenter_PreviewMouseLeftButtonDown erstellen "" Attribut im CustomScrollPresenter-Stil angegeben.

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

Dies scheint tatsächlich die Textauswahl zu deaktivieren, aber es erlaubt mir nicht, scroll zu verwenden. – juFo

0

können Sie IsFocusable = false verwenden. Das Suchfeld wird jedoch auch deaktiviert ...

1

Ein anderer Weg wäre, z.B. a DockPanel:

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

„oben“ liegen und die Document eingestellt Es ist die Breite und Höhe, um die tatsächliche Breite und Höhe des Scrollgehalt in z.B. Seitenladevorgang

Möglicherweise müssen Sie zusätzliche Logik hinzufügen, wenn Sie die Zoomoptionen verwenden und die horizontale Symbolleiste sichtbar wird.

Verwandte Themen