2014-07-18 6 views
1

나는이 문제를 해결하기위한 디자인에 대해 거의 알지 못합니다.UserControl의 사용자 지정 테두리

특수 테두리가있는 UserControl을 만들려고합니다. 테두리는 다음과 같이 표시되어야합니다. Border of Container

헤더는 초기화시 설정된 내용의 레이블 (또는 필요한 경우 텍스트 블록)입니다.

테두리는 머리글 앞에 멈추고 머리글 뒤에 설명 된 것과 같은 여백을두고 시작해야합니다. 테두리에는 테두리 모양에 맞아야하는 프레임이나 격자가 있습니다 (마스크가있는 경우). 전체 배경은 투명하거나 알파로 처리되어야합니다 (Color # 000000XX). 헤더가 사각형을 "숨기지"않기 때문에 중요합니다 꼭대기에 올라서.

나는 이것을 달성하기위한 지침에 대해 감사하겠습니다. Visual Studio 2012에서 블렌드를 사용할 수 있습니다.

당신이 여기

+1

표준 'GroupBox'를 사용할 수있는 것처럼 보입니다. 이 같은 UserControl 쓸모없는 것 같다. –

+0

@KingKing 테두리 모양을 변경할 수있는 더 많은 컨트롤과 기능이 추가 될 것입니다. 이 간단한 모양으로 어떻게하는지 알면 다른 불규칙한 모양의 테두리와 함께하는 법을 배웁니다. – SteelSoul

답변

3

당신이

난 당신이 더 선호의 템플릿에서 사용할 수있는 헤더와 내용을 가지고 있습니다 HeaderedContentControl 사용했다

가서 감사

<HeaderedContentControl x:Class="CSharpWPF.MyUserControl" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" 
         d:DesignWidth="300" 
         Header="Header"> 
    <HeaderedContentControl.Template> 
     <ControlTemplate TargetType="HeaderedContentControl"> 
      <Grid> 
       <Border BorderBrush="Black" 
         BorderThickness="4" 
         CornerRadius="10" 
         Padding="4" 
         Margin="10"> 
        <ContentPresenter /> 
       </Border> 
       <TextBlock Text="{TemplateBinding Header}" 
          Background="White" 
          HorizontalAlignment="Left" 
          VerticalAlignment="Top" 
          FontSize="13" 
          Margin="25,0,0,0" 
          Padding="10,0"/> 
      </Grid> 
     </ControlTemplate> 
    </HeaderedContentControl.Template> 
    <Grid> 
     <TextBlock Text="content" /> 
    </Grid> 
</HeaderedContentControl> 

결과

업데이트

나는이 적합하지 않은 경우 뒤에 몇 가지 코드를 포함 할 수 있습니다 순수 XAML에 의해

<HeaderedContentControl.Template> 
     <ControlTemplate TargetType="HeaderedContentControl"> 
      <DockPanel x:Name="root" 
         LastChildFill="True" 
         Margin="10"> 
       <DockPanel.Resources> 
        <Style TargetType="Border"> 
         <Setter Property="BorderBrush" 
           Value="Black" /> 
         <Setter Property="Width" 
           Value="30" /> 
         <Setter Property="Height" 
           Value="30" /> 
         <Setter Property="CornerRadius" 
           Value="10" /> 
        </Style> 
       </DockPanel.Resources> 
       <Grid DockPanel.Dock="Top" 
         Height="20"> 

        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="20" /> 
         <ColumnDefinition Width="auto" /> 
         <ColumnDefinition Width="*" /> 
         <ColumnDefinition Width="20" /> 
        </Grid.ColumnDefinitions> 
        <Border BorderThickness="4,4,0,0" /> 
        <Border BorderThickness="0,4,0,0" 
          Grid.Column="2" 
          Width="auto" 
          CornerRadius="0" /> 
        <Border BorderThickness="0,4,4,0" 
          Grid.Column="3" 
          HorizontalAlignment="Right" /> 
        <TextBlock Text="{TemplateBinding Header}" 
           FontSize="13" 
           Grid.Column="1" 
           Margin="10,-10" 
           VerticalAlignment="Top" /> 
       </Grid> 
       <Grid Height="20" 
         DockPanel.Dock="Bottom"> 
        <Border BorderThickness="4,0,4,4" 
          Width="auto" 
          VerticalAlignment="Bottom" /> 
       </Grid> 
       <Border BorderThickness="4,0,0,0" 
         DockPanel.Dock="Left" 
         Height="auto" 
         Width="20" 
         CornerRadius="0" /> 
       <Border BorderThickness="0,0,4,0" 
         DockPanel.Dock="Right" 
         Width="20" 
         Height="auto" 
         CornerRadius="0" /> 
       <ContentPresenter Margin="-10" /> 
      </DockPanel> 
     </ControlTemplate> 
    </HeaderedContentControl.Template> 

다른 접근 방식을 달성하려고 않았다,이 템플릿을 시도

결과

result

+0

감사합니다. 나는이 요소를 전혀 몰랐다. 나는 Apress 서적에 설명되어 있지 않은 것들이 있다고 생각합니다 :) Border 요소에서 의 목적이 무엇인지 말해 줄 수 있습니까? – SteelSoul

+0

[ContentPresenter] (http://msdn.microsoft.com/en-us/library/system.windows.controls.contentpresenter)는이 예제에서'TextBlock'을 포함하는'Grid' 요소와 같은 컨트롤의 내용을 표시합니다. 위 예제에서 또는 컨트롤의 새 인스턴스를 선언하는 동안 원하는 내용을 배치하도록 선택할 수 있습니다. 예 : '

+0

원래 질문에 대한 답은 솔루션에서 누락되었습니다. 명시된 바와 같이 배경은 투명하거나 알파로 작성되어야합니다. 헤더의 배경을 투명하게 설정하면 밑에 경계를 볼 수 있습니다. – SteelSoul

관련 문제