728x90
반응형
728x170
■ GroupBox 클래스를 사용해 그룹 컨트롤을 만드는 방법을 보여준다.
▶ Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestLibrary">
<Style TargetType="{x:Type local:GroupControl}">
<Style.Resources>
<BorderGapMaskConverter x:Key="BorderGapMaskConverter"/>
</Style.Resources>
<Setter Property="BorderBrush" Value="#D5DFE5" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupBox}">
<Grid SnapsToDevicePixels="true">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="6" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="6" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="6" />
</Grid.RowDefinitions>
<Border Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="4" Grid.RowSpan="3"
CornerRadius="4"
BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="White">
<Border.OpacityMask>
<MultiBinding ConverterParameter="7" Converter="{StaticResource BorderGapMaskConverter}">
<Binding ElementName="headerBorder" Path="ActualWidth" />
<Binding Path="ActualWidth" RelativeSource="{RelativeSource Self}" />
<Binding Path="ActualHeight" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</Border.OpacityMask>
<Border x:Name="outerBorder"
CornerRadius="3"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Border
CornerRadius="2"
BorderBrush="White"
BorderThickness="{TemplateBinding BorderThickness}" />
</Border>
</Border>
<Border x:Name="headerBorder" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2"
Padding="3 1 3 0">
<ContentPresenter
ContentSource="Header"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
<ContentPresenter Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2"
Margin="{TemplateBinding Padding}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="local:GroupControl.GroupStyle" Value="Rectangle">
<Setter TargetName="outerBorder" Property="CornerRadius" Value="0" />
</Trigger>
<Trigger Property="local:GroupControl.GroupStyle" Value="HeaderLine">
<Setter TargetName="outerBorder" Property="CornerRadius" Value="0" />
<Setter TargetName="outerBorder" Property="BorderThickness" Value="0 2 0 0" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
▶ GroupStyle.cs
namespace TestLibrary
{
/// <summary>
/// 그룹 스타일
/// </summary>
public enum GroupStyle
{
/// <summary>
/// 둥근 사각형
/// </summary>
RoundRectangle,
/// <summary>
/// 사각형
/// </summary>
Rectangle,
/// <summary>
/// 선
/// </summary>
HeaderLine
}
}
▶ GroupControl.cs
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace TestLibrary
{
/// <summary>
/// 그룹 컨트롤
/// </summary>
public class GroupControl : GroupBox
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 그룹 스타일 의존 속성 - GroupStyleProperty
/// <summary>
/// 그룹 스타일 의존 속성
/// </summary>
private static DependencyProperty GroupStyleProperty;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 그룹 스타일 - GroupStyle
/// <summary>
/// 그룹 스타일
/// </summary>
[Category("GroupControl")]
[Description("그룹 스타일을 가져오거나 설정합니다.")]
public GroupStyle GroupStyle
{
get
{
return (GroupStyle)GetValue(GroupStyleProperty);
}
set
{
SetValue(GroupStyleProperty, value);
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Static
#region 생성자 - GroupControl()
/// <summary>
/// 생성자
/// </summary>
static GroupControl()
{
GroupStyleProperty = UIHelper.RegisterDependencyProperty
(
GroupStyle.RoundRectangle,
false,
false,
false,
true,
null,
"GroupStyle",
typeof(GroupStyle),
typeof(GroupControl),
null
);
DefaultStyleKeyProperty.OverrideMetadata(typeof(GroupControl), new FrameworkPropertyMetadata(typeof(GroupControl)));
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Instance
//////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - GroupControl()
/// <summary>
/// 생성자
/// </summary>
public GroupControl()
{
BorderBrush = Brushes.Black;
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF] XAML용 UI 디버깅 도구 숨기기 (0) | 2017.05.30 |
---|---|
[C#/WPF] ControlTemplate 엘리먼트 : 조직도 TreeViewItem 엘리먼트 정의하기 (0) | 2017.05.25 |
[C#/WPF] 컬럼 리스트 박스 사용하기 (0) | 2017.05.09 |
[C#/WPF] ItemsControl 클래스 : 리스트 컨트롤 사용하기 (0) | 2017.04.07 |
[C#/WPF] Button 클래스 : 이미지 버튼 사용하기 (0) | 2017.04.02 |
[C#/WPF] ContentControl 클래스 : 확장/축소 패널 사용하기 (0) | 2017.04.01 |
[C#/WPF] Button 클래스 : 모노 버튼 사용하기 (0) | 2017.04.01 |
[C#/WPF] 원시 DPI 구하기 (0) | 2017.03.19 |
[C#/WPF] DPI 구하기 (0) | 2017.03.19 |
[C#/WPF] DPI 구하기 (0) | 2017.03.19 |
댓글을 달아 주세요