2010-07-19 12 views
3

WinForms에서 사용하는 기존 탭 컨트롤의 스타일과 일치하는 TabControl을 만들려고합니다. 그 기능 중 하나는 VS에서 발견되는 탭 단추 모양 (기울기 왼쪽, 다른 모서리가 사각형).WPF에서 사용자 정의 모양 테두리

방금 ​​WPF에서 시작 했으므로 틀린 나무를 짖고있을 수도 있지만 Border를 가져와 Path에 연결해야 테두리에 대한 일부 지오메트리를 지정할 수 있다고 생각했습니다. ... 그러나 나는 유용한 정보를 찾을 수 없습니다. S/O에서 'FreeFormContentControl'클래스를 찾았습니다.하지만 특정 모양으로 테두리를 그리지 않고 특정 모양으로 내용을 마스킹하기위한 것입니다.

누군가가 올바른 방향으로 나를 가리킬 수 있다면 나는 대단히 의무감을 느낍니다.

답변

2

당신은 예를 들어, 각면에 대한 개별 값의 측면에서 국경의 속성의 경계선과 CornerRadius를 지정할 수 있습니다

<Border CornerRadius="2,2,0,0" BorderThickness="2,2,2,0"/> 

그것은 좌상 및 topRight 코너가 2로 설정하고, 상단과 오른쪽 테두리 부분 왼쪽 반경 것

는 또한 사용자 정의 Adorner를 만들 수 있습니다 2.

UPDATE로 설정합니다. 더 많은 정보 제공 by this MSDN Article

그리고 TabItem 컨트롤 템플릿에 자체 크기 조정 기하학을 추가하기 만하면됩니다. 그것은에 대한 자세한 정보는 this MSDN Article

SAMPLE

<Style TargetType="{x:Type TabItem}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type TabItem}"> 
         <Grid> 
          <Viewbox Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Stretch="Fill" StretchDirection="DownOnly"> 
           <Path x:Name="path" Stretch="Fill" Stroke="Black" Fill="{StaticResource LightBrush}" Width="Auto" Height="Auto" Data="M 0,20 L 0,5 5,0 100,0 100,20 "/> 
          </Viewbox> 

          <Border Visibility="Visible" 
      x:Name="Border"                 
      Margin="5,1,0,1" > 
           <ContentPresenter x:Name="ContentSite" 
       VerticalAlignment="Center" 
       HorizontalAlignment="Center" 
       ContentSource="Header" 
       Margin="12,2,12,2" 
       RecognizesAccessKey="True"/> 
          </Border> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" Value="True"> 
           <Setter Property="Panel.ZIndex" Value="100" /> 
           <Setter TargetName="path" Property="Fill" Value="{StaticResource WindowBackgroundBrush}" /> 

          </Trigger> 
          <Trigger Property="IsEnabled" Value="False"> 
           <Setter TargetName="path" Property="Fill" Value="{StaticResource DisabledBackgroundBrush}" /> 
           <Setter TargetName="path" Property="Stroke" Value="{StaticResource DisabledBorderBrush}" /> 
           <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
+0

을 제공하지만 그 날 모서리가 둥근 사각형을 줄 것이다. VS의 탭 모양은 직선 가장자리가 아닌 왼쪽의 기울기입니다 ... –

+0

업데이트 된 답변보기. –

+0

아직도 내가 원하는 것은 아닙니다. Adorner는 Border의 기본 레이아웃을 변경하지 않을 것이고 두 번째 기사에는 TabItem 템플릿에 Geometry를 첨부하는 방법에 대한 힌트가 없습니다. –

관련 문제