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>
및 개발, 내 사용자 지정 컨트롤에 대한 테스트 양식을 작성 나는이 관련이 많은 매뉴얼과 기사를 다시 읽었습니다
:이 양식을 시작할 때 53,691,363,210
그러나, 나는 내 사용자 지정 컨트롤의 테두리가 아닌 내용 (2 TextBlock이의)를 참조하십시오 주제,하지만 여전히 내 ControlTemplate ContentControl 지정된 콘텐츠를 표시하지 않는 이유를 알아낼 수 없습니다. 내 문제를 해결하는 방법? ContentPresenter
대신 템플릿 ContentControl
의를 사용하여
'ContentControl' 대신'ContentPresenter'를 사용하거나 명시 적으로 바인딩하십시오 :' '. 이것은 사용자 정의 컨트롤의 content 속성이 'Content'라고 가정합니다. 그러나'ContentControl '에서 상속하는 경우에는 야생 가정이 아닙니다. –