아이 요소를 가지는 커스텀 컨트롤을 작성해 화면 작성을 절력화
소개
디자인성이 높은 화면을 XAML화하고 있으면 UserControl에서 파생시킨 커스텀 컨트롤을 여러 개 만들어 배치하는 작업이 많아집니다. 그 때 미묘하게 다른 요소를 가진 커스텀 컨트롤을 매번 만드는 것은 불효율입니다. WPF(XAML)에는 ContentPresenter라는 태그가 있으며 자식 요소가 있는 이 사용자 지정 컨트롤을 만들 수 있습니다.
App.xaml
<Application x:Class="ContentPresenterSample.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ContentPresenterSample"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type local:SingleControl}">
<Setter Property="Margin" Value="0" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:SingleControl}">
<Border BorderBrush="Blue" BorderThickness="1">
<Button Margin="5">ボタン</Button>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type local:ParentControl}">
<Setter Property="Margin" Value="0" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ParentControl}">
<ContentPresenter Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>
SingleControl.cs
namespace ContentPresenterSample
{
public class SingleControl: UserControl
{
}
}
ParentControl.cs
namespace ContentPresenterSample
{
public class ParentControl : UserControl
{
}
}
MainWindow.xaml
<Window x:Class="ContentPresenterSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ContentPresenterSample"
Title="MainWindow"
Width="525"
Height="350">
<Grid>
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<local:SingleControl Width="100" Height="100" Margin="0,0,10,0"/>
<local:ParentControl Width="100" Height="100">
<Border BorderBrush="Blue" BorderThickness="1">
<Button Margin="5">ボタン</Button>
</Border>
</local:ParentControl>
</StackPanel>
</Grid>
</Window>
왼쪽 컨트롤은 스타일에 디자인과 자식 요소를 포함하고 있지만 오른쪽 컨트롤은 ContentPresenter를 사용하여 자식 요소를 가질 수 있습니다. ContentPresenter를 사용하면 자식 요소의 다른 프레임만 그리는 커스텀 컨트롤 등도 작성할 수 있습니다.
Reference
이 문제에 관하여(아이 요소를 가지는 커스텀 컨트롤을 작성해 화면 작성을 절력화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takanemu/items/a3fed164cbb1945e466d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)