2016-09-09 6 views
0

WPF GroupBox와 비슷한 사용자 지정 컨트롤을 만들어야합니다. 나는 VS 2015 년 표준 WPF 사용자 정의 컨트롤 라이브러리 템플릿에서 시작이처럼 내 CustomGroupBox 제어 정의 :ContentControl이 ControlTemplate의 내용을 표시하지 않습니다.

public class CustomGroupBox : ContentControl 
{ 
    static CustomGroupBox() 
    { 
     DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomGroupBox), new FrameworkPropertyMetadata(typeof(CustomGroupBox))); 
    } 
} 

는 그 다음 사양에 따라 내 사용자 그룹 상자를 개발하기 위해 라인의 다음과 같은 최소한의 추가를 :

<Window x:Class="CustomGroupBoxClient.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:CustomGroupBoxClient" 
     xmlns:ctrl="clr-namespace:CustomGroupBox;assembly=CustomGroupBox" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ctrl:CustomGroupBox Margin="5"> 
      <StackPanel Orientation="Vertical"> 
       <TextBlock>Text Block #1</TextBlock> 
       <TextBlock>Text Block #2</TextBlock> 
      </StackPanel> 
     </ctrl:CustomGroupBox> 
    </Grid> 
</Window> 
:

디버깅하는
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:CustomGroupBox"> 
    <Style TargetType="{x:Type local:CustomGroupBox}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type local:CustomGroupBox}"> 
        <Border Background="{TemplateBinding Background}" 
          BorderBrush="Gray" BorderThickness="3" CornerRadius="3"> 
         <ContentControl /> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

및 개발, 내 사용자 지정 컨트롤에 대한 테스트 양식을 작성 나는이 관련이 많은 매뉴얼과 기사를 다시 읽었습니다

enter image description here

:이 양식을 시작할 때 53,691,363,210

그러나, 나는 내 사용자 지정 컨트롤의 테두리가 아닌 내용 (2 TextBlock이의)를 참조하십시오 주제,하지만 여전히 내 ControlTemplate ContentControl 지정된 콘텐츠를 표시하지 않는 이유를 알아낼 수 없습니다. 내 문제를 해결하는 방법? ContentPresenter 대신 템플릿 ContentControl의를 사용하여

+2

'ContentControl' 대신'ContentPresenter'를 사용하거나 명시 적으로 바인딩하십시오 :''. 이것은 사용자 정의 컨트롤의 content 속성이 'Content'라고 가정합니다. 그러나'ContentControl '에서 상속하는 경우에는 야생 가정이 아닙니다. –

답변

1

봅니다 : 기본적으로

<ContentPresenter /> 

, ContentPresenter는이 발견 어떤의 템플릿 부모와 디스플레이의 Content 속성을 찾습니다. 당신은 ... 그 ContentSource 값을 변경하기위한

<ContentPresenter ContentSource="FooBar" /> 

을 보이는 속성의 이름을 변경할 수 있습니다 ...하지만 당신이 ContentControl에서 상속하고 있기 때문에, 기본은 당신이 원하는 아마.

+1

젠장, 바보 같은 질문 이었어. 표준 WPF 컨트롤의 모든 템플릿에는 ContentPresenter가 사용됩니다. 아마도, 나는 이것을 간과 했으므로 ... – TecMan