■ DataTemplateSelector 클래스 사용하기
------------------------------------------------------------------------------------------------------------------------
▶ Employee.cs
using System;
namespace TestProject { /// <summary> /// 임직원 /// </summary> public class Employee { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary> /// 성명 /// </summary> private string name;
/// <summary> /// 얼굴 /// </summary> private string face;
/// <summary> /// 생일 /// </summary> private DateTime birthDate;
/// <summary> /// 왼손잡이 여부 /// </summary> private bool leftHanded;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Public
#region 성명 - Name
/// <summary> /// 성명 /// </summary> public string Name { set { this.name = value; } get { return this.name; } }
#endregion #region 얼굴 - Face
/// <summary> /// 얼굴 /// </summary> public string Face { set { this.face = value; } get { return this.face; } }
#endregion #region 생일 - BirthDate
/// <summary> /// 생일 /// </summary> public DateTime BirthDate { set { this.birthDate = value; } get { return this.birthDate; } }
#endregion #region 왼손잡이 여부 - LeftHanded
/// <summary> /// 왼손잡이 여부 /// </summary> public bool LeftHanded { set { leftHanded = value; } get { return leftHanded; } }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - Employee()
/// <summary> /// 생성자 /// </summary> public Employee() { }
#endregion #region 생성자 - Employee(name, face, birthDate, leftHanded)
/// <summary> /// 생성자 /// </summary> /// <param name="name">성명</param> /// <param name="face">얼굴</param> /// <param name="birthDate">생일</param> /// <param name="leftHanded">왼손잡이 여부</param> public Employee(string name, string face, DateTime birthDate, bool leftHanded) { Name = name; Face = face; BirthDate = birthDate; LeftHanded = leftHanded; }
#endregion } }
|
▶ EmployeeButton.xaml
<Button x:Class="TestProject.EmployeeButton" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:TestProject"> <Button.ContentTemplate> <DataTemplate DataType="{x:Type local:Employee}"> <DockPanel> <Image DockPanel.Dock="Left" Stretch="None" Source="{Binding Path=Face}" /> <UniformGrid VerticalAlignment="Center" Margin="10" Rows="2"> <TextBlock TextAlignment="Center" FontSize="16" Text="{Binding Path=Name}" /> <StackPanel Orientation="Horizontal" TextBlock.FontSize="16"> <TextBlock Text="{Binding Path=BirthDate.Month}" /> <TextBlock Text="/" /> <TextBlock Text="{Binding Path=BirthDate.Day}" /> <TextBlock Text="/" /> <TextBlock Text="{Binding Path=BirthDate.Year}" /> </StackPanel> </UniformGrid> </DockPanel> </DataTemplate> </Button.ContentTemplate> </Button>
|
▶ EmployeeTemplateSelector.cs
using System.Windows; using System.Windows.Controls;
namespace TestProject { /// <summary> /// 직원 데이터 템플리트 셀렉터 /// </summary> public class EmployeeDataTemplateSelector : DataTemplateSelector { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Public
#region 템플리트 선택하기 - SelectTemplate(item, container)
/// <summary> /// 템플리트 선택하기 /// </summary> /// <param name="item">항목</param> /// <param name="container">컨테이너</param> /// <returns>데이터 템플리트</returns> public override DataTemplate SelectTemplate(object item, DependencyObject container) { Employee employee = item as Employee;
FrameworkElement frameworkElement = container as FrameworkElement;
return (DataTemplate)frameworkElement.FindResource ( employee.LeftHanded ? "LeftHandedDataTemplateKey" : "RightHandedDataTemplateKey" ); }
#endregion } }
|
▶ 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" xmlns:local="clr-namespace:TestProject" Width="800" Height="600" Title="DataTemplateSelector 클래스 사용하기" FontFamily="나눔고딕코딩" FontSize="16"> <Window.Resources> <local:EmployeeDataTemplateSelector x:Key="EmployeeDataTemplateSelectorKey" /> <DataTemplate x:Key="RightHandedDataTemplateKey"> <DockPanel> <Image DockPanel.Dock="Right" Stretch="None" Source="{Binding Path=Face}" /> <UniformGrid Rows="2" VerticalAlignment="Center" Margin="10"> <TextBlock TextAlignment="Center" Text="{Binding Path=Name}" /> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Path=BirthDate.Month}" /> <TextBlock Text="/" /> <TextBlock Text="{Binding Path=BirthDate.Day}" /> <TextBlock Text="/" /> <TextBlock Text="{Binding Path=BirthDate.Year}" /> </StackPanel> </UniformGrid> </DockPanel> </DataTemplate> <DataTemplate x:Key="LeftHandedDataTemplateKey"> <DockPanel> <Image DockPanel.Dock="Left" Stretch="None" Source="{Binding Path=Face}" /> <UniformGrid Rows="2" VerticalAlignment="Center" Margin="10"> <TextBlock TextAlignment="Center" Text="{Binding Path=Name}" /> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Path=BirthDate.Month}" /> <TextBlock Text="/" /> <TextBlock Text="{Binding Path=BirthDate.Day}" /> <TextBlock Text="/" /> <TextBlock Text="{Binding Path=BirthDate.Year}" /> </StackPanel> </UniformGrid> </DockPanel> </DataTemplate> <Style TargetType="{x:Type Button}"> <Setter Property="HorizontalAlignment" Value="Center" /> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="Margin" Value="12" /> </Style> </Window.Resources> <Grid> <ScrollViewer> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <Button ContentTemplateSelector="{StaticResource EmployeeDataTemplateSelectorKey}"> <Button.Content> <local:Employee Name="Betty" BirthDate="1970/08/31" Face="IMAGE/Betty.png" LeftHanded="False" /> </Button.Content> </Button> <Button ContentTemplateSelector="{StaticResource EmployeeDataTemplateSelectorKey}"> <Button.Content> <local:Employee Name="Edgar" BirthDate="2/2/1965" Face="IMAGE/Edgar.png" LeftHanded="True" /> </Button.Content> </Button> <Button ContentTemplateSelector="{StaticResource EmployeeDataTemplateSelectorKey}"> <Button.Content> <local:Employee Name="Sally" BirthDate="1980/07/12" Face="IMAGE/Sally.png" LeftHanded="True" /> </Button.Content> </Button> <Button ContentTemplateSelector="{StaticResource EmployeeDataTemplateSelectorKey}"> <Button.Content> <local:Employee Name="Jim" BirthDate="1975/06/15" Face="IMAGE/Jim.png" LeftHanded="False" /> </Button.Content> </Button> </StackPanel> </ScrollViewer> </Grid> </Window>
|
------------------------------------------------------------------------------------------------------------------------
'C# > WPF' 카테고리의 다른 글
[C#/WPF] DatePicker 컨트롤 만들기 (0) | 2015.08.26 |
---|---|
[C#/WPF] 템플리트 엘리먼트 찾기 (0) | 2015.08.26 |
[C#/WPF] ItemsPanelTemplate 엘리먼트 : ListBox 엘리먼트의 ItemsPanel 속성 설정하기 (0) | 2015.08.24 |
[C#/WPF] VirtualizingStackPanel 엘리먼트 사용하기 (0) | 2015.08.24 |
[C#/WPF] DataTemplate 엘리먼트 : Triggers 속성 사용하기 (0) | 2015.08.24 |
[C#/WPF] DataTemplateSelector 클래스 사용하기 (0) | 2015.08.24 |
[C#/WPF] DataTemplate 엘리먼트 : DataType 속성을 사용해 Button 엘리먼트의 ContentTemplate 속성 설정하기 (0) | 2015.08.22 |
[C#/WPF] DataTemplate 엘리먼트 : DataType 속성을 사용해 Button 엘리먼트의 ContentTemplate 속성 설정하기 (0) | 2015.08.22 |
[C#/WPF] ContentPresenter 엘리먼트 사용하기 (0) | 2015.08.21 |
[C#/WPF] ControlTemplate 엘리먼트 : 리소스 형태로 Button 엘리먼트 정의하기 (0) | 2015.08.21 |
[C#/WPF] TemplateBinding 태그 확장 사용하기 (0) | 2015.08.21 |
댓글을 달아 주세요