2013-03-10 3 views
1

TabControl의 일부인 TabItem 내부에 Stackpanel이 있습니다. StackPanel에 추가 될 때마다 사용자 정의 세로 스크롤 막대가 나타납니다. 현재 StackItem 컨트롤 내부에 나타나는 것은 스택 패널의 맨 위에 있습니다. 스크롤 막대의 위치를 ​​TabControl 바깥으로 옮기고 싶습니다. 여백을 사용하여 몇 가지 작업을 시도했지만 ScrollBar가 TabControl의 가장자리 바깥쪽으로 밀려나 자마자 클립이 끊기고 zindex를 망치는 일도 전혀 없습니다. 도움이된다면 감사 할 것입니다. - LeifWPF 스크롤 막대 위치

  <TabItem Name="tabItem1" Background="{x:Null}" BorderBrush="#FF48D6EE" IsSelected="True"> 
       <TabItem.Template> 
        <ControlTemplate TargetType="{x:Type TabItem}"> 
         <Grid> 
          <Border Name="Tab1" Margin="0,0,0,0" BorderBrush="#FF002648" BorderThickness="1,0,1,1" CornerRadius="0,0,3,3"> 
           <Border.Effect> 
            <DropShadowEffect ShadowDepth="0" Color="#FF3Ed3F4" Opacity=".5" BlurRadius="2"/> 
           </Border.Effect> 
          </Border> 
          <HeaderedContentControl Name="TabHeaderText" 
               TextBlock.FontFamily="Aharoni" 
               TextBlock.FontWeight="Bold" 
               TextBlock.Foreground="#FF214c6d" 
               TextBlock.FontSize="18" 
               Header="Tab1" 
               Margin="10,1,10,0" 
               VerticalAlignment="Center" 
               HorizontalAlignment="Center"/> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" Value="True"> 
           <Setter TargetName="Tab1" Property="Background"> 
            <Setter.Value> 
             <LinearGradientBrush StartPoint=".5,0" EndPoint=".5,1"> 
              <GradientStop Color="#FF000a13" Offset="0" /> 
              <GradientStop Color="#FF06335c" Offset="0.5" /> 
              <GradientStop Color="#FF33bbdb" Offset="1" /> 
             </LinearGradientBrush> 
            </Setter.Value> 
           </Setter> 
           <Setter TargetName="Tab1" Property="Effect"> 
            <Setter.Value> 
             <DropShadowEffect ShadowDepth="0" Color="#FF3ccbee" Opacity="1" BlurRadius="5"/> 
            </Setter.Value> 
           </Setter> 
           <Setter TargetName="Tab1" Property="BorderBrush" Value="#FF48d6ed"/> 
           <Setter TargetName="Tab1" Property="BorderThickness" Value="1,0,1,1" /> 
           <Setter TargetName="Tab1" Property="Header"> 
            <Setter.Value> 
             <custom:OutlinedText FontSize="18" 
                  FontFamily="Aharoni" 
                  FontWeight="ExtraBold" 
                  Fill="Black" 
                  Stroke="#ff3bb1db" 
                  StrokeThickness=".75" 
                  Text="Tab1"/> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </TabItem.Template> 
       <ScrollViewer HorizontalScrollBarVisibility="Disabled" 
         VerticalScrollBarVisibility="Auto" 
         Template="{StaticResource ScrollViewerControlTemplate}"> 
        <StackPanel Name="panelTab1" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
       </ScrollViewer> 
      </TabItem> 

답변

0

우리는 비슷한 문제가 발생했습니다. 우리가 발견 한 것은 WPF가 클리핑 될 때 음수 여백으로 물건을 그리지 않는다는 것입니다. 클리핑은 TabItem 컨트롤이 포함 된 요소 중 하나에 MinHeight가 설정되어 있고 창이 MinHeight 아래로 축소되면 작동합니다. 기본적으로 스크롤 막대는 PART_VerticalScrollBar에 대해 음수 여백을 사용합니다.

해결 방법은 TabItem이 포함될 수있는 컨테이너에 MinHeight가 설정되어 있지 않은지 확인하는 것입니다. MinHeight를 사용해야하는 경우 최상위보기에서 설정하십시오.

Snoop 도구는 WPF 레이아웃 문제를 디버깅하는 데 매우 유용합니다.

http://snoopwpf.codeplex.com/