سؤال

والسؤال بسيط. كيف يمكنك تعطيل اختيار نص DocumentViewer في برنامج الأغذية العالمي؟ هذا هو ميزة حيث يتم عرض وثيقة XPS المشاهد ومن ثم النص يمكن تسليط الضوء عن طريق الماوس. ويمكن أيضا أن النص المميز يتم نسخ ولكن لقد تم تعطيل هذا بالفعل. أنا لا أعرف كيفية تعطيل تسليط الضوء.

وشكرا!

هل كانت مفيدة؟

المحلول

ولقد تمكنا من حل هذا عن طريق تجاوز 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;
    }

نصائح أخرى

وهناك طريقة أخرى سيكون لإضافة مثل وdockpanel:

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

والكذب "أعلى" documentviewer ووضع العرض؟ ق والارتفاع إلى العرض الفعلي وارتفاع محتوى scrollviewer في مثل حدث صفحة التحميل.

وقد تحتاج إلى إضافة منطق إضافية في حالة استخدام خيارات التكبير وشريط أفقي تصبح مرئية.

ويمكنك استخدام IsFocusable = كاذبة. ولكن مربع البحث سيتم تعطيل جدا ...

وتنفيذ التعليمات البرمجية التالية في xaml.cs جزء (DocumentViewerInstance س: اسم DocumentViewer بك في XAML الخاص بك)

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

ويمكنك استخدام IsFocusable=false أو IsHitTestVisible = false أو التعامل مع أي حدث المعاينة (على سبيل المثال في الإجابة مقبولة) لاختيار تعطيل ولكن الارتباطات التشعبية لا تعمل! إذا قمت بتعيين IsSelectionEnabled = كاذبة، سيتم تعطيل اختيار ولكن ارتباطات تشعبية العمل أيضا. (تحذير! يمكن تغييرها IsSelectionEnabled عن القيمة الحقيقية بعد تعيين كاذبة، لذا يجب عليك مراجعة قيمة في كثير من الأحيان).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top