[WPF] Button With Template - ControlTemplate !!
WPF 2007. 12. 13. 17:07 |<Page x:Class="ButtonWidthTemplate.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Button HorizontalAlignment="Center" VerticalAlignment="Center"
FontSize="48" Padding="20">
Button with Custom Template
<Button.Template>
<ControlTemplate>
<Border Name="border" BorderThickness="3" BorderBrush="Red"
Background="{DynamicResource {x:Static SystemColors.ControlLightBrushKey}}">
<TextBlock
Name="txtblk"
FontStyle="Italic"
Text="{TemplateBinding Button.Content}"
Margin="{TemplateBinding Button.Padding}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="UIElement.IsMouseOver" Value="True">
<Setter TargetName="border"
Property="Border.CornerRadius" Value="24" />
<Setter TargetName="border"
Property="Border.BorderThickness" Value="10
" />
<Setter TargetName="txtblk"
Property="TextBlock.FontWeight"
Value="Bold" />
</Trigger>
<Trigger Property="Button.IsPressed" Value="True">
<Setter TargetName="border"
Property="Border.Background"
Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
</Page>
- Button은 여러 프로퍼티(HorizontalAlignment, VerticalAlignment, fontSize, Padding)을 정의 하고 버튼 컨텐트를 "Button with Custom Template"로 설정
- Button.Template 프로퍼티는 ControlTemplate 타입의 프로퍼티이며, FrameworkTemplate과 그것의 파생 클래스의 컨튼트 프로퍼티는 모드 Visual Tree이다.
- VisualTree는 굵기가 3인 빨간색의 Border로부터 시작된다.
- Background 프로퍼티는 DynamicResource 마크업 확장을 사용해 가져온 시스템 색상
- TextBlock을 사용해 이 버튼이 텍스트만 표시하게 제한
- TextBlock의 Text 프로퍼티를 Button의 Content 프로퍼티로 설정했다.
- TemplateBinding 마크업 확장은 컨트롤이 정의한 플퍼티와 템플릿의 비주얼 트리 속 프로퍼티를 연결하기 위해 정의된다
Text="{TemplateBinding ContentControl.Content}"
TemplateBinding 인자는 반드시 의존 프로퍼티여야 한다. 따라서 이 프로퍼티가 정의돈 클래스나 그 프로퍼티를 상속받은 클래스의 이름을 인자에 포함한다. 여기서는 ContentControl.Content 대신 Button.Content를 사용해도 된다. - string 타입의 프로퍼티가 object 타입의 TemplateBinding을 가질수 있다.
Margin="{TemplateBinding Button.Padding}" - Trigger 엘리먼트 내의 Setter 엘리먼트는 항상 VisualTree 엘리먼트의 프로퍼티 중 하나에 영향을 미친다. Setter 엘리먼트는 이 프로퍼티의 이름을 Targetname 속성으로 참조하며, Property와 Value 속성은 스타일에서와 같이 동작한다.