[WPF] GridSplitter 컨트롤 Position 값 가져오기

1. 소개

안녕하세요.


오늘은 WPF 에서 GridSplitter 컨트롤 사용 방법에 대해서 알려 드리려고 합니다.
그 중에서도, GridSplitter 컨트롤의 변경된 사이즈, 즉 Position 값을 가져오는 방법에 대해서 알려 드리려고 해요.


최근에 회사에서 프로젝트를 하면서 GridSplitter 컨트롤의 변경된 사이즈를 그대로 저장하는 기능을 개발한 적이 있었는데요. 이때 사용했던 기술이니까 필요하신 분들은 참고해 주시면 좋겠습니다.^^


1개의 이벤트 핸들러 를 이용하시면 됩니다.

2. 사용되는 이벤트 핸들러

  • DragCompleted 이벤트 핸들러

사용되는 이벤트 핸들러는 1개로써 DragCompleted 이벤트 핸들러 를 이용하여 GridSplitter 컨트롤의 변경된 사이즈 Position 값을 얻을 수 있습니다.

그럼 예제를 통해서 어떻게 변경된 사이즈를 가져오는 지 보여 드리겠습니다.

3. 예제 코드

MainWindow.xaml

<Window x:Class="WpfApp8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp8"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="400">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50*" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="50*" />
        </Grid.RowDefinitions>

        <StackPanel Grid.Row="0" Grid.Column="1" Background="Tan"/>
        <GridSplitter Grid.Row="1"
              HorizontalAlignment="Stretch"
              VerticalAlignment="Center"
              Background="Black" 
              ShowsPreview="True"
              Height="5"
              DragCompleted="GridSplitter_DragCompleted"
              DragDelta="GridSplitter_DragDelta"
           />
        <StackPanel Grid.Row="2" Grid.Column="0" Background="Brown"/>
    </Grid>
</Window>

MainWindow.xaml.cs

using System.Windows;

namespace WpfApp8
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void GridSplitter_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
        {
            MessageBox.Show($"가로 변경 사이즈 : {e.HorizontalChange}, 세로 변경 사이즈 : {e.VerticalChange}");
        }

        private void GridSplitter_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
        {
            //MessageBox.Show($"가로 변경 사이즈 : {e.HorizontalChange}, 세로 변경 사이즈 : {e.VerticalChange}");
        }
    }
}

4. 실행 결과

  • 위와 같이 변경된 사이즈를 DragCompleted 이벤트 핸들러 를 통해서 얻은 후에, 해당 사이즈를 저장하고 있다가 프로그램을 실행시킬 때 해당 사이즈를 그대로 가져와 실행시키면 변경된 사이즈대로 다시 프로그램을 실행시키게 개발 할 수 있습니다.
  • DragCompleted 이벤트 핸들러 말고, DragDelta 이벤트 핸들러 를 이용하여 비슷한 동작을 구현할 수 있으니까 상황에 맞는 이벤트 핸들러를 이용하여 GridSplitter의 위치를 얻어 오시면 되겠습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY