2008-12-15 22 views
5

में टेक्स्ट चयन अक्षम करना सरल प्रश्न। आप WPF में DocumentViewer के टेक्स्ट चयन को कैसे अक्षम करते हैं? यह वह सुविधा है जहां दर्शक द्वारा एक एक्सपीएस दस्तावेज़ प्रदर्शित होता है और फिर पाठ को माउस के माध्यम से हाइलाइट किया जा सकता है। हाइलाइट किए गए टेक्स्ट की भी प्रतिलिपि बनाई जा सकती है लेकिन मैंने इसे पहले ही अक्षम कर दिया है। मुझे नहीं पता कि हाइलाइटिंग को अक्षम कैसे करें।DocumentViewer

धन्यवाद!

उत्तर

2

हमने दस्तावेज़व्यूयर नियंत्रण में एम्बेडेड स्क्रॉलव्यूयर के ControlTemplate को ओवरराइड करके इसे हल किया है। "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> 

फिर DocumentViewer के लिए ControlTemplate में इसके साथ ScrollViewer की शैली को ओवरराइड:

<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; 
    } 
+0

यह वास्तव में पाठ चयन अक्षम करने लगता है, लेकिन यह मुझे स्क्रॉल का उपयोग करने की अनुमति नहीं देता है। – juFo

0

आप IsFocusable = false का उपयोग कर सकते हैं। लेकिन खोज बॉक्स भी अक्षम कर दिया जाएगा ...

1

एक और तरीका जोड़ना होगा उदा। एक dockpanel:

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

झूठ बोल रही है "ऊपर" documentviewer और वास्तविक चौड़ाई और जैसे में ScrollViewer सामग्री की ऊंचाई तक है यह चौड़ाई और ऊंचाई सेट पृष्ठ लोडिंग घटना।

ज़ूम विकल्प का उपयोग करते समय आपको अतिरिक्त तर्क जोड़ना पड़ सकता है और क्षैतिज टूलबार दिखाई देता है।