728x90
반응형
728x170
▶ StudentModel.cs
using System.Collections.Generic;
namespace TestProject
{
/// <summary>
/// 학생 모델
/// </summary>
public class StudentModel
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region ID - ID
/// <summary>
/// ID
/// </summary>
public int ID { get; set; }
#endregion
#region 성명 - NAME
/// <summary>
/// 성명
/// </summary>
public string NAME { get; set; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 학생 리스트 구하기 - GetStudentList(count)
/// <summary>
/// 학생 리스트 구하기
/// </summary>
/// <param name="count">ㅅ학생 수</param>
/// <returns>학생 리스트</returns>
public static List<StudentModel> GetStudentList(int count)
{
List<StudentModel> list = new List<StudentModel>();
for(int i = 0; i < count; i++)
{
list.Add(new StudentModel { ID = i, NAME = $"학생{i}" });
}
return list;
}
#endregion
}
}
728x90
▶ 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="DateTemplat 클래스 : 자식 객체 구하기"
FontFamily="나눔고딕코딩"
FontSize="16">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="10" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListBox Name="listBox" Grid.Row="0">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Name="idTextBlock"
Foreground="Red"
TextAlignment="Right"
Text="{Binding ID}" />
<TextBlock Name="nameTextBlock"
Margin="20 0 0 0"
Foreground="Blue"
Text="{Binding NAME}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Name="button" Grid.Row="2"
Width="100"
Height="30"
Content="테스트" />
</Grid>
</Window>
300x250
▶ MainWindow.xaml.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace TestProject
{
/// <summary>
/// 메인 윈도우
/// </summary>
public partial class MainWindow : Window
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainWindow()
/// <summary>
/// 생성자
/// </summary>
public MainWindow()
{
InitializeComponent();
this.listBox.ItemsSource = StudentModel.GetStudentList(10000);
this.button.Click += button_Click;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 테스트 버튼 클릭시 처리하기 - button_Click(sender, e)
/// <summary>
/// 테스트 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void button_Click(object sender, RoutedEventArgs e)
{
ListBoxItem listBoxItem = this.listBox.ItemContainerGenerator.ContainerFromItem(this.listBox.SelectedItem) as ListBoxItem;
if(listBoxItem == null)
{
return;
}
ContentPresenter contentPresenter = FindVisualChild<ContentPresenter>(listBoxItem);
DataTemplate dataTemplate = contentPresenter.ContentTemplate;
if(dataTemplate == null)
{
return;
}
TextBlock nameTextBlock = dataTemplate.FindName("nameTextBlock", contentPresenter) as TextBlock;
if(nameTextBlock == null)
{
return;
}
nameTextBlock.Foreground = Brushes.DarkGreen;
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Event
#region 비주얼 자식 구하기 - FindVisualChild<TChild>(parentObject)
/// <summary>
/// 비주얼 자식 구하기
/// </summary>
/// <typeparam name="TChild">자식 타입</typeparam>
/// <param name="parentObject">부모 객체</param>
/// <returns>비주얼 자식</returns>
private TChild FindVisualChild<TChild>(DependencyObject parentObject) where TChild : DependencyObject
{
for(int i = 0; i < VisualTreeHelper.GetChildrenCount(parentObject); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parentObject, i);
if(child != null && child is TChild)
{
return (TChild)child;
}
else
{
TChild grandChild = FindVisualChild<TChild>(child);
if(grandChild != null)
{
return grandChild;
}
}
}
return null;
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WPF' 카테고리의 다른 글
[C#/WPF] DropShadowEffect 엘리먼트 : 네온싸인 효과 만들기 (0) | 2022.07.23 |
---|---|
[C#/WPF] DropShadowEffect 엘리먼트 : 네온싸인 효과 만들기 (0) | 2022.07.23 |
[C#/WPF] ControlTemplate 엘리먼트 : ToggleButton 엘리먼트를 정의해 전원 버튼 만들기 (0) | 2022.07.23 |
[C#/WPF] ControlTemplate 엘리먼트 : ToggleButton 엘리먼트를 정의해 재생 버튼 만들기 (0) | 2022.07.23 |
[C#/WPF] ListBox 엘리먼트 : IsSynchronizedWithCurrentItem 속성을 사용해 현재 항목 동기화 설정하기 (0) | 2022.05.28 |
[C#/WPF] ControlTemplate 엘리먼트 : Button 엘리먼트 정의하기 (0) | 2022.05.25 |
[C#/WPF] ContentPresenter 엘리먼트 : RecognizesAccessKey 속성을 사용해 액세스 키 사용 여부 설정하기 (0) | 2022.05.25 |
[C#/WPF] ContentControl 클래스 : 원형 파급 효과 애니메이션 컨트롤 만들기 (0) | 2022.05.25 |
[C#/WPF] WebBrowser 엘리먼트 : 스크립트 오류 억제하기 (0) | 2022.05.24 |
[C#/WPF] InputMethod 엘리먼트 : PreferredImeState/PreferredImeConversionMode 첨부 속성을 사용해 한글 모드에서 입력 시작하기 (0) | 2022.05.24 |
댓글을 달아 주세요