■ DataGrid 클래스 : ScrollViewer 객체 참조 구하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


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="DataGrid 클래스 : ScrollViewer 객체 참조 구하기"

    FontFamily="나눔고딕코딩"

    FontSize="16">

    <Grid>

        <Grid Margin="10">

            <Grid.RowDefinitions>

                <RowDefinition Height="*"    />

                <RowDefinition Height="10"   />

                <RowDefinition Height="Auto" />

                <RowDefinition Height="10"   />

            </Grid.RowDefinitions>

            <DataGrid Name="dataGrid" Grid.Row="0"

                AutoGenerateColumns="False"

                IsReadOnly="True">

                <DataGrid.Columns>

                    <DataGridTextColumn Header="Company Name"       Binding="{Binding CompanyName}" />

                    <DataGridTextColumn Header="Contact First Name" Binding="{Binding FirstName}"   />

                    <DataGridTextColumn Header="Contact Last Name"  Binding="{Binding LastName}"    />

                </DataGrid.Columns>

                <DataGrid.RowDetailsTemplate>

                    <DataTemplate>

                        <Border

                            BorderThickness="0"

                            Background="BlanchedAlmond"

                            Padding="10">

                            <StackPanel Orientation="Vertical">

                                <StackPanel Orientation="Horizontal">

                                    <TextBlock

                                        VerticalAlignment="Center"

                                        FontSize="12"

                                        Text="Email : " />

                                    <TextBlock

                                        VerticalAlignment="Center"

                                        Foreground="MidnightBlue"

                                        FontSize="16"

                                        Text="{Binding EmailAddress}" />

                                </StackPanel>

                                <StackPanel Orientation="Horizontal">

                                    <TextBlock

                                        VerticalAlignment="Center"

                                        FontSize="12"

                                        Text="Phone : " />

                                    <TextBlock

                                        VerticalAlignment="Center"

                                        Foreground="MidnightBlue"

                                        FontSize="16"

                                        Text="{Binding Phone}" />

                                </StackPanel>

                                <StackPanel Orientation="Horizontal">

                                    <TextBlock

                                        VerticalAlignment="Center"

                                        FontSize="12"

                                        Text="Sales Person : " />

                                    <TextBlock

                                        VerticalAlignment="Center"

                                        Foreground="MidnightBlue"

                                        FontSize="16"

                                        Text="{Binding SalesPerson}" />

                                </StackPanel>

                            </StackPanel>

                        </Border>

                    </DataTemplate>

                </DataGrid.RowDetailsTemplate>

            </DataGrid>

            <Button Name="button" Grid.Row="2"

                Width="100"

                Height="30"

                Content="테스트" />

        </Grid>

    </Grid>

</Window>

 

 

MainWindow.xaml.cs

 

 

using System.Collections.Generic;

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();

 

            List<Employee> list = new List<Employee>();

 

            for(int i = 1; i <= 100; i++)

            {

                list.Add

                (

                    new Employee

                    {

                        CompanyName = "compnay " + i.ToString(),

                        FirstName = "first name " + i.ToString(),

                        LastName = "last name " + i.ToString()

                    }

                );

            }

 

            this.dataGrid.ItemsSource = list;

 

            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)

        {

            ScrollViewer scrollViewer = FindTemplateElement<ScrollViewer>(this.dataGrid);

 

            if(scrollViewer != null)

            {

                scrollViewer.Margin = new Thickness(10);

            }

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Function

 

        #region 템플리트 엘리먼트 찾기 - FindTemplateElement<T>(sourceDependencyObject)

 

        /// <summary>

        /// 템플리트 엘리먼트 찾기

        /// </summary>

        /// <typeparam name="TElement">엘리먼트 타입</typeparam>

        /// <param name="sourceDependencyObject">소스 의존 객체</param>

        /// <returns>템플리트 엘리먼트</returns>

        private TElement FindTemplateElement<TElement>(DependencyObject sourceDependencyObject) where TElement : class

        {

            if(sourceDependencyObject is TElement)

            {

                return sourceDependencyObject as TElement;

            }

 

            for(int i = 0; i < VisualTreeHelper.GetChildrenCount(sourceDependencyObject); i++)

            {

                Visual visual = FindTemplateElement<TElement>(VisualTreeHelper.GetChild(sourceDependencyObject, i)) as Visual;

 

                if(visual != null)

                {

                    return visual as TElement;

                }

            }

 

            return null;

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요