728x90
반응형
728x170
■ ControlTemplate 엘리먼트를 사용해 Menu 엘리먼트를 정의하는 방법을 보여준다.
▶ MainWindow.xaml
<Window x:Class="TestProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="800"
Height="600"
Title="TestProject"
FontFamily="나눔고딕코딩"
FontSize="16">
<Window.Resources>
<Color x:Key="DisabledForegroundColorKey">#ff888888</Color>
<Color x:Key="ControlLightColorKey">White</Color>
<Color x:Key="ControlMediumColorKey">#ff7381f9</Color>
<Color x:Key="ControlMouseOverColorKey">#ff3843c4</Color>
<Color x:Key="GlyphColorKey">#ff444444</Color>
<Color x:Key="BorderLightColorKey">#ffcccccc</Color>
<Color x:Key="BorderMediumColorKey">#ff888888</Color>
<Color x:Key="BorderDarkColorKey">#ff444444</Color>
<LinearGradientBrush x:Key="MenuPopupBrushKey"
StartPoint="0.5 0"
EndPoint="0.5 1">
<GradientStop Offset="0" Color="{DynamicResource ControlLightColorKey }" />
<GradientStop Offset="0.5" Color="{DynamicResource ControlMediumColorKey}" />
<GradientStop Offset="1" Color="{DynamicResource ControlLightColorKey }" />
</LinearGradientBrush>
<Geometry x:Key="DownArrowGeometryKey">M 0 0 L 3.5 4 L 7 0 Z</Geometry>
<Geometry x:Key="UpArrowGeometryKey">M 0 4 L 3.5 0 L 7 4 Z</Geometry>
<Geometry x:Key="RightArrowGeometryKey">M 0 0 L 4 3.5 L 0 7 Z</Geometry>
<Style x:Key="{x:Type Menu}" TargetType="{x:Type Menu}">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Menu}">
<Border BorderThickness="1">
<Border.BorderBrush>
<LinearGradientBrush
StartPoint="0 0"
EndPoint="0 1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Offset="0.0" Color="{DynamicResource BorderLightColorKey}" />
<GradientStop Offset="1.0" Color="{DynamicResource BorderDarkColorKey }" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.BorderBrush>
<Border.Background>
<LinearGradientBrush
StartPoint="0.5 0"
EndPoint="0.5 1">
<GradientStop Offset="0" Color="{DynamicResource ControlLightColorKey }" />
<GradientStop Offset="1" Color="{DynamicResource ControlMediumColorKey}" />
</LinearGradientBrush>
</Border.Background>
<StackPanel
Orientation="Horizontal"
ClipToBounds="True"
IsItemsHost="True" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Grid.IsSharedSizeScope" Value="true" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="HasDropShadow" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContextMenu}">
<Border Name="border"
BorderThickness="1"
Background="{StaticResource MenuPopupBrushKey}">
<Border.BorderBrush>
<SolidColorBrush Color="{StaticResource BorderMediumColorKey}" />
</Border.BorderBrush>
<StackPanel
IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Cycle" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="HasDropShadow" Value="true">
<Setter
TargetName="border"
Property="Padding"
Value="0 3 0 3" />
<Setter
TargetName="border"
Property="CornerRadius"
Value="4" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="MenuScrollButtonStyleKey" TargetType="{x:Type RepeatButton}"
BasedOn="{x:Null}">
<Setter Property="MinWidth" Value="0" />
<Setter Property="MinHeight" Value="0" />
<Setter Property="ClickMode" Value="Hover" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type RepeatButton}">
<DockPanel
Background="Transparent"
SnapsToDevicePixels="true">
<Rectangle Name="rightRectangle" DockPanel.Dock="Right"
Width="1"
Fill="Transparent" />
<Rectangle Name="bottomRectangle" DockPanel.Dock="Bottom"
Height="1"
Fill="Transparent" />
<Rectangle Name="leftRectangle" DockPanel.Dock="Left"
Width="1"
Fill="Transparent" />
<Rectangle Name="topRectangle" DockPanel.Dock="Top"
Height="1"
Fill="Transparent" />
<ContentPresenter Name="contentPresenter"
Margin="2 2 2 2"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</DockPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="true">
<Setter
TargetName="rightRectangle"
Property="Fill"
Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}" />
<Setter
TargetName="bottomRectangle"
Property="Fill"
Value="{DynamicResource {x:Static SystemColors.ControlLightLightBrushKey}}" />
<Setter
TargetName="leftRectangle"
Property="Fill"
Value="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}" />
<Setter
TargetName="topRectangle"
Property="Fill"
Value="{DynamicResource {x:Static SystemColors.ControlDarkDarkBrushKey}}" />
<Setter
TargetName="contentPresenter"
Property="Margin"
Value="3 3 1 1" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<MenuScrollingVisibilityConverter x:Key="MenuScrollingVisibilityConverterKey" />
<Style x:Key="MenuScrollViewerStyleKey" TargetType="{x:Type ScrollViewer}"
BasedOn="{x:Null}">
<Setter Property="HorizontalScrollBarVisibility" Value="Hidden" />
<Setter Property="VerticalScrollBarVisibility" Value="Auto" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid SnapsToDevicePixels="True">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Grid.Row="1" Grid.Column="0">
<ScrollContentPresenter Margin="{TemplateBinding Padding}" />
</Border>
<RepeatButton Grid.Row="0" Grid.Column="0"
Style="{StaticResource MenuScrollButtonStyleKey}"
Command="{x:Static ScrollBar.LineUpCommand}"
CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
Focusable="False">
<RepeatButton.Visibility>
<MultiBinding
FallbackValue="Visibility.Collapsed"
Converter="{StaticResource MenuScrollingVisibilityConverterKey}"
ConverterParameter="0">
<Binding
RelativeSource="{RelativeSource TemplatedParent}"
Path="ComputedVerticalScrollBarVisibility" />
<Binding
RelativeSource="{RelativeSource TemplatedParent}"
Path="VerticalOffset" />
<Binding
RelativeSource="{RelativeSource TemplatedParent}"
Path="ExtentHeight" />
<Binding
RelativeSource="{RelativeSource TemplatedParent}"
Path="ViewportHeight" />
</MultiBinding>
</RepeatButton.Visibility>
<Path
Fill="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"
Data="{StaticResource UpArrowGeometryKey}" />
</RepeatButton>
<RepeatButton Grid.Row="2" Grid.Column="0"
Style="{StaticResource MenuScrollButtonStyleKey}"
Command="{x:Static ScrollBar.LineDownCommand}"
CommandTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}"
Focusable="False">
<RepeatButton.Visibility>
<MultiBinding
FallbackValue="Visibility.Collapsed"
Converter="{StaticResource MenuScrollingVisibilityConverterKey}"
ConverterParameter="100">
<Binding
RelativeSource="{RelativeSource TemplatedParent}"
Path="ComputedVerticalScrollBarVisibility" />
<Binding
RelativeSource="{RelativeSource TemplatedParent}"
Path="VerticalOffset" />
<Binding
RelativeSource="{RelativeSource TemplatedParent}"
Path="ExtentHeight" />
<Binding
RelativeSource="{RelativeSource TemplatedParent}"
Path="ViewportHeight" />
</MultiBinding>
</RepeatButton.Visibility>
<Path
Fill="{DynamicResource {x:Static SystemColors.MenuTextBrushKey}}"
Data="{StaticResource DownArrowGeometryKey}" />
</RepeatButton>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{x:Static MenuItem.SeparatorStyleKey}" TargetType="{x:Type Separator}">
<Setter Property="Height" Value="1" />
<Setter Property="Margin" Value="0 4 0 4" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Separator}">
<Border BorderThickness="1">
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderMediumColorKey}" />
</Border.BorderBrush>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="{x:Static MenuItem.TopLevelHeaderTemplateKey}" TargetType="{x:Type MenuItem}">
<Border Name="border">
<Grid>
<ContentPresenter
Margin="6 3 6 3"
ContentSource="Header"
RecognizesAccessKey="True" />
<Popup Name="popup"
Placement="Bottom"
PopupAnimation="Fade"
AllowsTransparency="True"
Focusable="False"
IsOpen="{TemplateBinding IsSubmenuOpen}">
<Border Name="submenuBorder"
BorderThickness="1"
Background="{DynamicResource MenuPopupBrushKey}"
SnapsToDevicePixels="True">
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderMediumColorKey}" />
</Border.BorderBrush>
<ScrollViewer
Style="{StaticResource MenuScrollViewerStyleKey}"
CanContentScroll="True">
<StackPanel
IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Cycle" />
</ScrollViewer>
</Border>
</Popup>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSuspendingPopupAnimation" Value="true">
<Setter
TargetName="popup"
Property="PopupAnimation"
Value="None" />
</Trigger>
<Trigger Property="IsHighlighted" Value="true">
<Setter
TargetName="border"
Property="BorderBrush"
Value="Transparent" />
<Setter
TargetName="border"
Property="Background">
<Setter.Value>
<LinearGradientBrush
StartPoint="0 0"
EndPoint="0 1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{StaticResource ControlLightColorKey }" />
<GradientStop Offset="1.0" Color="{StaticResource ControlMouseOverColorKey}" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger
SourceName="popup"
Property="AllowsTransparency"
Value="True">
<Setter
TargetName="submenuBorder"
Property="CornerRadius"
Value="0 0 4 4" />
<Setter
TargetName="submenuBorder"
Property="Padding"
Value="0 0 0 3" />
</Trigger>
<Trigger
Property="IsEnabled"
Value="False">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{StaticResource DisabledForegroundColorKey}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<ControlTemplate x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}" TargetType="{x:Type MenuItem}">
<Border Name="border">
<Grid>
<ContentPresenter
Margin="6 3 6 3"
ContentSource="Header"
RecognizesAccessKey="True" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsHighlighted" Value="true">
<Setter
TargetName="border"
Property="Background">
<Setter.Value>
<LinearGradientBrush
StartPoint="0 0"
EndPoint="0 1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{StaticResource ControlLightColorKey }" />
<GradientStop Offset="1.0" Color="{StaticResource ControlMouseOverColorKey}" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{StaticResource DisabledForegroundColorKey}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}" TargetType="{x:Type MenuItem}">
<Border Name="border"
BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Icon" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut" />
<ColumnDefinition Width="13" />
</Grid.ColumnDefinitions>
<ContentPresenter Name="iconContentPresenter"
VerticalAlignment="Center"
Margin="6 0 6 0"
ContentSource="Icon" />
<Border Name="checkBorder"
Margin="6 0 6 0"
Width="13"
Height="13"
BorderThickness="1"
Visibility="Collapsed">
<Border.BorderBrush>
<LinearGradientBrush
StartPoint="0 0"
EndPoint="0 1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Offset="0.0" Color="{DynamicResource BorderLightColorKey}" />
<GradientStop Offset="1.0" Color="{DynamicResource BorderDarkColorKey }" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.BorderBrush>
<Border.Background>
<LinearGradientBrush
StartPoint="0 0"
EndPoint="0 1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource ControlLightColorKey }" />
<GradientStop Offset="1.0" Color="{DynamicResource ControlMediumColorKey}" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.Background>
<Path Name="checkMarkPath"
Width="7"
Height="7"
SnapsToDevicePixels="False"
StrokeThickness="2"
Visibility="Hidden"
Data="M 0 0 L 7 7 M 0 7 L 7 0">
<Path.Stroke>
<SolidColorBrush Color="{DynamicResource GlyphColorKey}" />
</Path.Stroke>
</Path>
</Border>
<ContentPresenter Grid.Column="1"
ContentSource="Header"
RecognizesAccessKey="True" />
<TextBlock Grid.Column="2"
Margin="5 2 0 2"
Text="{TemplateBinding InputGestureText}" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="ButtonBase.Command" Value="{x:Null}" />
<Trigger Property="Icon" Value="{x:Null}">
<Setter
TargetName="iconContentPresenter"
Property="Visibility"
Value="Hidden" />
</Trigger>
<Trigger Property="IsChecked" Value="true">
<Setter
TargetName="checkMarkPath"
Property="Visibility"
Value="Visible" />
</Trigger>
<Trigger Property="IsCheckable" Value="true">
<Setter
TargetName="checkBorder"
Property="Visibility"
Value="Visible" />
<Setter
TargetName="iconContentPresenter"
Property="Visibility"
Value="Hidden" />
</Trigger>
<Trigger Property="IsHighlighted" Value="true">
<Setter
TargetName="border"
Property="Background">
<Setter.Value>
<LinearGradientBrush
StartPoint="0.5 0"
EndPoint="0.5 1">
<GradientStop Offset="0" Color="Transparent" />
<GradientStop Offset="1" Color="{DynamicResource ControlMouseOverColorKey}" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter
TargetName="border"
Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush
StartPoint="0.5 0"
EndPoint="0.5 1">
<GradientStop Offset="0" Color="{DynamicResource BorderMediumColorKey}" />
<GradientStop Offset="1" Color="Transparent" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{StaticResource DisabledForegroundColorKey}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<ControlTemplate x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}" TargetType="{x:Type MenuItem}">
<Border Name="border"
BorderThickness="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="Icon" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut" />
<ColumnDefinition Width="13" />
</Grid.ColumnDefinitions>
<ContentPresenter Name="iconContentPresenter"
VerticalAlignment="Center"
Margin="6 0 6 0"
ContentSource="Icon" />
<ContentPresenter Grid.Column="1"
ContentSource="Header"
RecognizesAccessKey="True" />
<TextBlock Grid.Column="2"
Margin="5 2 2 2"
Text="{TemplateBinding InputGestureText}" />
<Path Grid.Column="3"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Data="M 0 0 L 0 7 L 4 3.5 Z">
<Path.Fill>
<SolidColorBrush Color="{DynamicResource GlyphColorKey}" />
</Path.Fill>
</Path>
<Popup Name="popup"
Placement="Right"
HorizontalOffset="-4"
PopupAnimation="Fade"
AllowsTransparency="True"
Focusable="False"
IsOpen="{TemplateBinding IsSubmenuOpen}">
<Border Name="submenuBorder"
BorderThickness="1"
Background="{DynamicResource MenuPopupBrushKey}"
SnapsToDevicePixels="True">
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderMediumColorKey}" />
</Border.BorderBrush>
<ScrollViewer
Style="{StaticResource MenuScrollViewerStyleKey}"
CanContentScroll="True">
<StackPanel
IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Cycle" />
</ScrollViewer>
</Border>
</Popup>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Icon" Value="{x:Null}">
<Setter
TargetName="iconContentPresenter"
Property="Visibility"
Value="Collapsed" />
</Trigger>
<Trigger Property="IsHighlighted" Value="true">
<Setter
TargetName="border"
Property="Background">
<Setter.Value>
<LinearGradientBrush
StartPoint="0.5 0"
EndPoint="0.5 1">
<GradientStop Offset="0" Color="Transparent" />
<GradientStop Offset="1" Color="{DynamicResource ControlMouseOverColorKey}" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter
TargetName="border"
Property="BorderBrush">
<Setter.Value>
<LinearGradientBrush
StartPoint="0.5 0"
EndPoint="0.5 1">
<GradientStop Offset="0" Color="{DynamicResource BorderMediumColorKey}" />
<GradientStop Offset="1" Color="Transparent" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger
SourceName="popup"
Property="AllowsTransparency"
Value="True">
<Setter
TargetName="submenuBorder"
Property="CornerRadius"
Value="4" />
<Setter
TargetName="submenuBorder"
Property="Padding"
Value="0 3 0 3" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{StaticResource DisabledForegroundColorKey}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style x:Key="{x:Type MenuItem}" TargetType="{x:Type MenuItem}">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Style.Triggers>
<Trigger Property="Role" Value="TopLevelHeader">
<Setter Property="Template" Value="{StaticResource {x:Static MenuItem.TopLevelHeaderTemplateKey}}" />
<Setter Property="Grid.IsSharedSizeScope" Value="true" />
</Trigger>
<Trigger Property="Role" Value="TopLevelItem">
<Setter Property="Template" Value="{StaticResource {x:Static MenuItem.TopLevelItemTemplateKey}}" />
</Trigger>
<Trigger Property="Role" Value="SubmenuHeader">
<Setter Property="Template" Value="{StaticResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}" />
</Trigger>
<Trigger Property="Role" Value="SubmenuItem">
<Setter Property="Template" Value="{StaticResource {x:Static MenuItem.SubmenuItemTemplateKey}}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<DockPanel LastChildFill="False">
<Menu DockPanel.Dock="Top">
<MenuItem Header="_Edit">
<MenuItem Command="ApplicationCommands.Copy" InputGestureText="Ctrl+C" />
<MenuItem Command="ApplicationCommands.Cut" InputGestureText="Ctrl+X" />
<MenuItem Command="ApplicationCommands.Paste" InputGestureText="Ctrl+V" />
</MenuItem>
<MenuItem Header="_Font">
<MenuItem
Header="_Bold"
IsCheckable="True" />
<MenuItem
Header="_Italic"
IsCheckable="True" />
<Separator />
<MenuItem Header="I_ncrease Font Size" />
<MenuItem Header="_Decrease Font Size" />
</MenuItem>
</Menu>
</DockPanel>
</Window>
728x90
반응형
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF] ControlTemplate 엘리먼트 : ScrollBar 엘리먼트 정의하기 (0) | 2023.01.29 |
---|---|
[C#/WPF] ControlTemplate 엘리먼트 : RepeatButton 엘리먼트 정의하기 (0) | 2023.01.29 |
[C#/WPF] ControlTemplate 엘리먼트 : ProgressBar 엘리먼트 정의하기 (0) | 2023.01.29 |
[C#/WPF] ControlTemplate 엘리먼트 : PasswordBox 엘리먼트 정의하기 (0) | 2023.01.28 |
[C#/WPF] ControlTemplate 엘리먼트 : NavigationWindow 엘리먼트 정의하기 (0) | 2023.01.28 |
[C#/WPF] ControlTemplate 엘리먼트 : ListView 엘리먼트 정의하기 (0) | 2023.01.27 |
[C#/WPF] ControlTemplate 엘리먼트 : ListBox 엘리먼트 정의하기 (0) | 2023.01.27 |
[C#/WPF] ControlTemplate 엘리먼트 : Label 엘리먼트 정의하기 (0) | 2023.01.27 |
[C#/WPF] ControlTemplate 엘리먼트 : GroupBox 엘리먼트 정의하기 (0) | 2023.01.27 |
[C#/WPF] ControlTemplate 엘리먼트 : Frame 엘리먼트 정의하기 (0) | 2023.01.27 |
댓글을 달아 주세요