2011-10-24 7 views
0

私はAvalonDockを使用して、開発者とQAの内部使用のためのツールを開発しています。私はテーマで提供されているVS2010スタイルのカスタムバージョンに取り組んでいます。スタイルはちょうど私がそれに満足するためにVS2010のように十分に機能しませんでした。ほぼすべての色とイメージの変更を加えました。ヘッダー領域に収まるよりも多くのタブがある場合、DocumentPaneのタブがVS2010のようにスクロールしないことに気付きました。スタイリングWPF ScrollViewer VS2010タブのように見えるScroller

私は自分のプロジェクトで完全なスタイルを持っているので、スタイルが適用される領域が見つかりました。私は、広告の周りにScrollViewerを置いた:DocumentTabPanelは、どうやら水平のスクロールバーを再レイアウトして、タブの左側と右側に矢印があるように思える。

これは可能ですか?ここで

Example of overflow scrolling in VS2010

私の塩基修飾の後が、ScrollViewerのにそのままのスタイルである:

<Style x:Key="{x:Type ad:DocumentPane}" TargetType="{x:Type ad:DocumentPane}"> 
    <Setter Property="Background" Value="{DynamicResource {ComponentResourceKey {x:Type ad:DockingManager}, {x:Static ad:AvalonDockBrushes.DefaultBackgroundBrush}}}"/> 
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ad:DocumentPane}" > 
       <ControlTemplate.Resources> 
        <ContextMenu x:Key="DocumentsListMenu" StaysOpen="True" /> 
       </ControlTemplate.Resources> 
       <Border 
        Background="{TemplateBinding Background}"> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto"/> 
          <RowDefinition Height="*"/> 
         </Grid.RowDefinitions> 
         <Border x:Name="PART_Header" 
          Grid.Row="0" 
          Focusable="False" 
          > 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition /> 
            <ColumnDefinition Width="18"/> 
           </Grid.ColumnDefinitions> 
           <ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" CanContentScroll="True"> 

             <ad:DocumentTabPanel 
              x:Name="paneTabsPanel" 
              Panel.ZIndex ="1" 
              IsItemsHost="True" 
              TabItemStyle="{StaticResource CustomDocumentTabItemStyle}"/> 

           </ScrollViewer> 
           <Button x:Name="PART_ShowContextMenuButton" 
             Grid.Column="2" 
             Width="15" Height="15" 
             Style="{StaticResource PaneHeaderCommandStyle}"> 
            <Image x:Name="ShowContextMenuIcon" Source="pack://application:,,,/Images/Dev2010/PinMenu.png" Width="13" Height="13" Stretch="None"/> 
           </Button> 
          </Grid> 
         </Border> 
         <Grid Grid.Row="1"> 
          <Border 
           x:Name="topBorder" 
           Height="4" 
           Background="{DynamicResource {ComponentResourceKey {x:Type ad:DockingManager}, {x:Static ad:AvalonDockBrushes.DocumentHeaderBorder}}}" 
           CornerRadius="2,2,0,0" 
           VerticalAlignment="Top" 
           HorizontalAlignment="Stretch" 
           > 
          </Border> 
          <Border 
           x:Name="bottomBorder" 
           Height="4" 
           Background="{DynamicResource {ComponentResourceKey {x:Type ad:DockingManager}, {x:Static ad:AvalonDockBrushes.DocumentHeaderBorder}}}" 
           CornerRadius="0,0,2,2" 
           VerticalAlignment="Bottom" 
           HorizontalAlignment="Stretch" 
           > 
          </Border> 
          <ContentPresenter 
            Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectedItem.Content}" 
            Margin="0,4,0,4" 
            KeyboardNavigation.TabNavigation="Local" 
            KeyboardNavigation.DirectionalNavigation="Contained" 
            KeyboardNavigation.TabIndex="1" 
            /> 
         </Grid> 
        </Grid> 
       </Border> 
       <ControlTemplate.Triggers>       
        <Trigger Property="HasItems" Value="False"> 
         <Setter Property="Visibility" Value="Hidden"/> 
        </Trigger> 
        <Trigger Property="ShowHeader" Value="False"> 
         <Setter Property="Visibility" Value="Collapsed" TargetName="PART_Header" /> 
        </Trigger> 
        <!--<DataTrigger Binding="{Binding Path=IsMainDocumentPane, RelativeSource={RelativeSource Self}}" Value="True"> 
         <Setter Property="Source" Value="pack://application:,,,/Images/Dev2010/PinDockMenu.png" TargetName="ShowContextMenuIcon"/> 
        </DataTrigger>--> 

               <Trigger Property="ContainsActiveDocument" Value="True"> 
                <Setter Property="Background" 
           Value="{DynamicResource {ComponentResourceKey {x:Type ad:DockingManager}, {x:Static ad:AvalonDockBrushes.DocumentHeaderBorderSelected}}}" 
           TargetName="topBorder"/> 
                <Setter Property="Background" 
           Value="{DynamicResource {ComponentResourceKey {x:Type ad:DockingManager}, {x:Static ad:AvalonDockBrushes.DocumentHeaderBorderSelected}}}" 
           TargetName="bottomBorder"/> 
               </Trigger> 

               <Trigger Property="ContainsActiveContent" Value="True"> 
                <Setter Property="Background" 
           Value="{DynamicResource {ComponentResourceKey {x:Type ad:DockingManager}, {x:Static ad:AvalonDockBrushes.DocumentHeaderBorderSelectedActivated}}}" 
           TargetName="topBorder"/> 
                <Setter Property="Background" 
           Value="{DynamicResource {ComponentResourceKey {x:Type ad:DockingManager}, {x:Static ad:AvalonDockBrushes.DocumentHeaderBorderSelectedActivated}}}" 
           TargetName="bottomBorder"/> 
               </Trigger> 

               <EventTrigger RoutedEvent="Window.Loaded"> 
                <BeginStoryboard> 
                 <Storyboard> 
                  <DoubleAnimation 
            Storyboard.TargetProperty="Opacity" 
            From="0" To="1" Duration="0:0:0.200" /> 
                 </Storyboard> 
                </BeginStoryboard> 
               </EventTrigger> 
               </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

答えて

1

私は過去にこのような何かをした、そしてそれが最も簡単ScrollViewerののスクロールバーを非表示にするました2つのリピートボタンが押されたときにコンテンツを手動でスクロールします。

私はもともとhereを見つけることができると始めたが、基本的な考え方は、このような何かを見てScrollViewerののテンプレートを上書きすることですコード:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 

    <RepeatButton Grid.Column="0" Command="ScrollBar.PageLeftCommand" Content="<" /> 
    <RepeatButton Grid.Column="2" Command="ScrollBar.PageRightCommand" Content=">" /> 

    <ScrollContentPresenter Grid.Column="1" Content="{TemplateBinding ScrollViewer.Content}"/> 
</Grid> 
+0

[OK]を、私は私がほぼ同じ方向に行っていたと思いますそれと同時に私はこれを見た。クール!私は同じ結論に達したことをうれしく思っています。しかし、どこかでScrollContentPresenterが必要なのですか?私はスクロールビューアーのMSDNスタイルとテンプレートページを見ています。 –

+0

@MikeGはい、上記のリンクで完全なテンプレートを見つけることができます。私は単純化のためにコードを単純にしておきたいと思っていましたが、どこが混乱の原因になるか分かりました。それは私の答えにそれを加えた。 – Rachel

+0

ただ確実にする。私はこのスタイリングのことを初めて知っています。今度は、あふれていて、スクロール側が動作するはずのタブヘッダーを表示から削除するAvalonDockコードをオーバーライドするだけです。ありがとう! –

関連する問題