代码之家  ›  专栏  ›  技术社区  ›  Cheeso

WPF:如何删除文档查看器中的搜索框?

  •  9
  • Cheeso  · 技术社区  · 14 年前

    我的XAML代码如下:

    <Window
        xmlns                 ='http://schemas.microsoft.com/netfx/2007/xaml/presentation'
        xmlns:x               ='http://schemas.microsoft.com/winfx/2006/xaml'
        Title                 ='Print Preview - More stuff here'
        Height                ='200'
        Width                 ='300'
        WindowStartupLocation ='CenterOwner'>
        <DocumentViewer Name='dv1' ... />
    </Window>
    

    如何在XAML或C中消除搜索框?

    7 回复  |  直到 7 年前
        1
  •  14
  •   Community Egal    7 年前

    Vlad's answer 引导我研究如何以编程方式获取包含“查找”工具栏的ContentControl。我不想为DocumentViewer编写一个全新的模板;我只想更改(隐藏)一个控件。把问题减少到 如何检索通过模板应用的控件? .
    我的想法是:

      Window window = ... ; 
      DocumentViewer dv1 = LogicalTreeHelper.FindLogicalNode(window, "dv1") as DocumentViewer;
      ContentControl cc = dv1.Template.FindName("PART_FindToolBarHost", dv1) as ContentControl;
      cc.Visibility = Visibility.Collapsed;
    
        2
  •  11
  •   Community Egal    7 年前

    你可以做类似的事情 Cheeso's answer 具有的样式 ContentControl 当名字是 PART_FindToolBarHost .

    <DocumentViewer>
      <DocumentViewer.Resources>
        <Style TargetType="ContentControl">
          <Style.Triggers>
            <Trigger Property="Name" Value="PART_FindToolBarHost">
              <Setter Property="Visibility" Value="Collapsed" />
            </Trigger>
          </Style.Triggers>
        </Style>
      </DocumentViewer.Resources>
    </DocumentViewer>
    
        3
  •  4
  •   Martin Liversage    12 年前

    正如VLAD指出的,您可以替换控制模板。遗憾的是,msdn上可用的控件模板不是 DocumentViewer 控制。下面是修改后的正确模板,通过设置隐藏搜索栏 Visibility="Collapsed" PART_FindToolBarHost :

    <!-- DocumentViewer style with hidden search bar. -->
    <Style TargetType="{x:Type DocumentViewer}" xmlns:Documents="clr-namespace:System.Windows.Documents;assembly=PresentationUI">
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
      <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
      <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
      <Setter Property="ContextMenu" Value="{DynamicResource {ComponentResourceKey ResourceId=PUIDocumentViewerContextMenu, TypeInTargetAssembly={x:Type Documents:PresentationUIStyleResources}}}"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type DocumentViewer}">
            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Focusable="False">
              <Grid Background="{TemplateBinding Background}" KeyboardNavigation.TabNavigation="Local">
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                  <RowDefinition Height="Auto"/>
                  <RowDefinition Height="*"/>
                  <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <ContentControl Grid.Column="0" Focusable="{TemplateBinding Focusable}" Grid.Row="0" Style="{DynamicResource {ComponentResourceKey ResourceId=PUIDocumentViewerToolBarStyleKey, TypeInTargetAssembly={x:Type Documents:PresentationUIStyleResources}}}" TabIndex="0"/>
                <ScrollViewer x:Name="PART_ContentHost" CanContentScroll="true" Grid.Column="0" Focusable="{TemplateBinding Focusable}" HorizontalScrollBarVisibility="Auto" IsTabStop="true" Grid.Row="1" TabIndex="1"/>
                <DockPanel Grid.Row="1">
                  <FrameworkElement DockPanel.Dock="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"/>
                  <Rectangle Height="10" Visibility="Visible" VerticalAlignment="top">
                    <Rectangle.Fill>
                      <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                        <LinearGradientBrush.GradientStops>
                          <GradientStopCollection>
                            <GradientStop Color="#66000000" Offset="0"/>
                            <GradientStop Color="Transparent" Offset="1"/>
                          </GradientStopCollection>
                        </LinearGradientBrush.GradientStops>
                      </LinearGradientBrush>
                    </Rectangle.Fill>
                  </Rectangle>
                </DockPanel>
                <ContentControl x:Name="PART_FindToolBarHost" Grid.Column="0" Focusable="{TemplateBinding Focusable}" Grid.Row="2" TabIndex="2" Visibility="Collapsed"/>
              </Grid>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    

    您需要添加对的引用 PresentationUI.dll .此程序集位于文件夹中 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\WPF .

        4
  •  4
  •   Vlad    12 年前

    您可以替换它的控件模板。供参考:默认 DocumentViewer 的控件模板位于此处: http://msdn.microsoft.com/en-us/library/aa970452.aspx

    搜索工具栏的名称是 PART_FindToolBarHost ,因此您也可以只分配 Visibility Collapsed .


    编辑:
    正如@martin的评论所建议的,msdn中的控制模板(上面引用)不是完全正确的。提取默认情况下WPF中实际使用的模板的更好方法是使用Blend(如果我没有弄错,请在上下文菜单中编辑控件模板)。

        5
  •  2
  •   Community Egal    7 年前

    为了得到Cheeso在构造函数中工作的答案,我必须添加:

    dv1.ApplyTemplate();
    

    否则,CC将显示为空。看到答案 here

        6
  •  1
  •   juFo    7 年前
     <DocumentViewer>
         <DocumentViewer.Resources>
             <!-- Toolbar -->          
             <Style TargetType="ToolBar">
                 <Setter Property="Visibility" Value="Collapsed" />
             </Style>
              <!-- Search -->
             <Style TargetType="ContentControl">
                 <Setter Property="Visibility" Value="Collapsed" />
             </Style>
         </DocumentViewer.Resources>
    </DocumentViewer>
    
        7
  •  0
  •   RAL    14 年前

    你确定你需要 文档阅读器 ?你可以使用 流文档滚动查看器 如果您喜欢分页或多列显示,可以使用 流程文档页面查看器 .