첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.

728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainWindow.xaml

<Window Name="window" x:Class="TestProject.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:shell="http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell"
    Width="800"
    Height="600"
    Title="윈도우 테두리 제거하기">
    <shell:WindowChrome.WindowChrome>
        <shell:WindowChrome
            GlassFrameThickness="0"
            CornerRadius="0"
            CaptionHeight="0"
            ResizeBorderThickness="5" />
    </shell:WindowChrome.WindowChrome>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="27" />
            <RowDefinition Height="*"  />
        </Grid.RowDefinitions>
        <Border x:Name="headerBorder">
            <Border.Background>
                <LinearGradientBrush StartPoint="0.5 0" EndPoint="0.5 1">
                    <GradientStop Color="#ff444749" Offset="0"     />
                    <GradientStop Color="#ff0c0e0e" Offset="1"     />
                    <GradientStop Color="#ff101012" Offset="0.504" />
                </LinearGradientBrush>
            </Border.Background>
            <Grid>
                <StackPanel HorizontalAlignment="Left" Orientation="Horizontal">
                    <Grid
                        Margin="10 0 0 0"
                        Width="16"
                        Height="16"
                        Background="White">
                        <Rectangle Fill="Yellow" />
                    </Grid>
                    <Label
                        Margin="5 0 0 0"
                        Foreground="White"
                        Content="{Binding ElementName=window, Path=Title}" />
                </StackPanel>
                <StackPanel
                    Margin="0 0 5 0"
                    HorizontalAlignment="Right"
                    VerticalAlignment="Center"
                    Orientation="Horizontal">
                    <Button Width="20" Click="minimizedButton_Click">
                        <Button.Style>
                            <Style TargetType="{x:Type Button}">
                                <Setter Property="FocusVisualStyle"           Value="{x:Null}"    />
                                <Setter Property="SnapsToDevicePixels"        Value="True"        />
                                <Setter Property="Cursor"                     Value="Hand"        />
                                <Setter Property="Background"                 Value="Transparent" />
                                <Setter Property="BorderBrush"                Value="Transparent" />
                                <Setter Property="BorderThickness"            Value="0"           />
                                <Setter Property="HorizontalContentAlignment" Value="Center"      />
                                <Setter Property="VerticalContentAlignment"   Value="Center"      />
                                <Setter Property="Foreground"
                                    Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type Button}">
                                            <Grid Width="16" Height="16">
                                                <Border x:Name="border"
                                                    Background="#ff2f2f2f"
                                                    Opacity="0"
                                                    SnapsToDevicePixels="True" />
                                                <Rectangle x:Name="minimizedRectangle"
                                                    Margin="0 10 0 0"
                                                    VerticalAlignment="Center"
                                                    Width="12"
                                                    Height="2"
                                                    Fill="#ff7b7776"
                                                    SnapsToDevicePixels="True" />
                                            </Grid>
                                            <ControlTemplate.Triggers>
                                                <Trigger Property="IsKeyboardFocused" Value="true" />
                                                <Trigger Property="IsMouseOver"       Value="True">
                                                    <Setter
                                                        TargetName="minimizedRectangle"
                                                        Property="Fill"
                                                        Value="White" />
                                                </Trigger>
                                                <Trigger Property="IsPressed" Value="true">
                                                    <Setter
                                                        TargetName="minimizedRectangle"
                                                        Property="Fill"
                                                        Value="#ff8b8988" />
                                                    <Setter
                                                        TargetName="minimizedRectangle"
                                                        Property="Opacity"
                                                        Value="0.7" />
                                                </Trigger>
                                                <Trigger Property="IsEnabled" Value="False">
                                                    <Setter Property="Opacity" Value="0.5" />
                                                </Trigger>
                                            </ControlTemplate.Triggers>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Button.Style>
                    </Button>
                    <ToggleButton Width="20" Click="maximizedButton_Click">
                        <ToggleButton.Style>
                            <Style TargetType="{x:Type ToggleButton}">
                                <Setter Property="FocusVisualStyle"           Value="{x:Null}"    />
                                <Setter Property="SnapsToDevicePixels"        Value="True"        />
                                <Setter Property="Cursor"                     Value="Hand"        />
                                <Setter Property="Background"                 Value="Transparent" />
                                <Setter Property="BorderBrush"                Value="Transparent" />
                                <Setter Property="BorderThickness"            Value="0"           />
                                <Setter Property="HorizontalContentAlignment" Value="Center"      />
                                <Setter Property="VerticalContentAlignment"   Value="Center"      />
                                <Setter Property="Foreground"
                                    Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type ToggleButton}">
                                            <Grid
                                                Width="16"
                                                Height="16"
                                                Background="Transparent">
                                                <Border x:Name="border"
                                                    Background="#002f2f2f"
                                                    SnapsToDevicePixels="True" />
                                                <Grid>
                                                    <Path x:Name="path_max"
                                                        Margin="0"
                                                        HorizontalAlignment="Center"
                                                        VerticalAlignment="Center"
                                                        Width="12"
                                                        Height="10"
                                                        Fill="#ff7b7776"
                                                        Stretch="Fill"
                                                        Visibility="Visible"
                                                        Data="
M 57.001 182.001 L 46.998 182.001 L 46.998 174.026 L 57.001 174.026 z M 46 183 L 58 183 L 58 173 L 46 173 z" />
                                                    <Path x:Name="path_max_Check"
                                                        Margin="0"
                                                        HorizontalAlignment="Stretch"
                                                        VerticalAlignment="Stretch"
                                                        Width="12"
                                                        Height="10"
                                                        Fill="#FF7B7776"
                                                        Stretch="Fill"
                                                        Visibility="Collapsed"
                                                        Data="
M 0.99799991 4.0260001 L 0.99799991 9.0010005 8.0009999 9.0010005 8.0009999 4.0260001 z 
M 3.9999999 1.0000001 L 3.9999999 3.0000001 9 3.0000001 9 6.0000001 11 6.0000001 11 1.0000001 z 
M 3 0 L 12 0 12 7.0000001 9 7.0000001 9 10 0 10 0 3.0000001 3 3.0000001 z" />
                                                </Grid>
                                            </Grid>
                                            <ControlTemplate.Triggers>
                                                <Trigger Property="IsKeyboardFocused" Value="true" />
                                                <Trigger Property="IsChecked"         Value="true">
                                                    <Setter Property="Visibility" TargetName="path_max_Check" Value="Visible"   />
                                                    <Setter Property="Visibility" TargetName="path_max"       Value="Collapsed" />
                                                </Trigger>
                                                <MultiTrigger>
                                                    <MultiTrigger.Conditions>
                                                        <Condition Property="IsChecked"   Value="false" />
                                                        <Condition Property="IsMouseOver" Value="true"  />
                                                    </MultiTrigger.Conditions>
                                                    <Setter Property="Fill" TargetName="path_max" Value="White" />
                                                </MultiTrigger>
                                                <MultiTrigger>
                                                    <MultiTrigger.Conditions>
                                                        <Condition Property="IsChecked"   Value="true" />
                                                        <Condition Property="IsMouseOver" Value="true" />
                                                    </MultiTrigger.Conditions>
                                                    <Setter Property="Fill" TargetName="path_max_Check" Value="#ff8b8988" />
                                                </MultiTrigger>
                                                <Trigger Property="IsMouseOver" Value="True" />
                                                <Trigger Property="IsPressed"   Value="true">
                                                    <Setter Property="Fill"    TargetName="path_max"       Value="White" />
                                                    <Setter Property="Fill"    TargetName="path_max_Check" Value="White" />
                                                    <Setter Property="Opacity" TargetName="path_max"       Value="0.7"   />
                                                    <Setter Property="Opacity" TargetName="path_max_Check" Value="0.7"   />
                                                </Trigger>
                                                <Trigger Property="IsEnabled" Value="False">
                                                    <Setter Property="Opacity" Value="0.5" />
                                                </Trigger>
                                            </ControlTemplate.Triggers>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </ToggleButton.Style>
                    </ToggleButton>
                    <Button Width="20" Click="closeButton_Click">
                        <Button.Style>
                            <Style TargetType="{x:Type Button}">
                                <Setter Property="FocusVisualStyle"           Value="{x:Null}"    />
                                <Setter Property="SnapsToDevicePixels"        Value="True"        />
                                <Setter Property="Cursor"                     Value="Hand"        />
                                <Setter Property="Background"                 Value="Transparent" />
                                <Setter Property="BorderBrush"                Value="Transparent" />
                                <Setter Property="BorderThickness"            Value="0"           />
                                <Setter Property="HorizontalContentAlignment" Value="Center"      />
                                <Setter Property="VerticalContentAlignment"   Value="Center"      />
                                <Setter Property="Foreground"
                                    Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate TargetType="{x:Type Button}">
                                            <Grid Width="16" Height="16">
                                                <Border x:Name="border"
                                                    Background="#FF2F2F2F"
                                                    Opacity="0"
                                                    SnapsToDevicePixels="True" />
                                                <Path x:Name="path_Closed"
                                                    HorizontalAlignment="Center"
                                                    VerticalAlignment="Center"
                                                    Width="11"
                                                    Height="10"
                                                    SnapsToDevicePixels="True"
                                                    Fill="#ff7b7776"
                                                    StrokeThickness="0"
                                                    Stretch="Fill"
                                                    Visibility="Visible"
                                                    Data="
M 0.73200232 0 L 5.5 4.2873921 10.267998 0 11 0.76599883 6.2921877 4.9997287 11 9.2330017
10.268002 10 5.5 5.712142 0.73199838 10 0 9.2330017 4.7078123 4.9997287 0 0.76599883 z" />
                                            </Grid>
                                            <ControlTemplate.Triggers>
                                                <Trigger Property="IsKeyboardFocused" Value="true" />
                                                <Trigger Property="IsMouseOver"       Value="True">
                                                    <Setter Property="Fill"   TargetName="path_Closed" Value="White" />
                                                    <Setter Property="Width"  TargetName="path_Closed" Value="12"    />
                                                    <Setter Property="Height" TargetName="path_Closed" Value="10"    />
                                                </Trigger>
                                                <Trigger Property="IsPressed" Value="true">
                                                    <Setter Property="Fill"    TargetName="path_Closed" Value="#ff8b8988" />
                                                    <Setter Property="Opacity" TargetName="path_Closed" Value="0.7"       />
                                                </Trigger>
                                                <Trigger Property="IsEnabled" Value="False">
                                                    <Setter Property="Opacity" Value="0.5" />
                                                </Trigger>
                                            </ControlTemplate.Triggers>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Button.Style>
                    </Button>
                </StackPanel>
            </Grid>
        </Border>
        <Border Grid.Row="1"
            BorderThickness="1"
            BorderBrush="Black">
            <Ellipse
                Margin="10"
                Fill="RoyalBlue" />
        </Border>
    </Grid>
</Window>

 

728x90

 

▶ MainWindow.xaml.cs

using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Input;

namespace TestProject
{
    /// <summary>
    /// 메인 윈도우
    /// </summary>
    public partial class MainWindow : Window
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainWindow()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainWindow()
        {
            InitializeComponent();

            StateChanged                          += Window_StateChanged;
            this.headerBorder.MouseLeftButtonDown += headerBorder_MouseLeftButtonDown;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private
        //////////////////////////////////////////////////////////////////////////////// Event

        #region 윈도우 상태 변경시 처리하기 - Window_StateChanged(sender, e)

        /// <summary>
        /// 윈도우 상태 변경시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void Window_StateChanged(object sender, EventArgs e)
        {
            switch(WindowState)
            {
                case WindowState.Maximized : SetMaximizedState();         break;
                case WindowState.Normal    :
                case WindowState.Minimized : SetNormalOrMinimizedState(); break;
            }
        }

        #endregion
        #region 헤더 테두리 마우스 이동시 처리하기 - headerBorder_MouseMove(sender, e)

        /// <summary>
        /// 헤더 테두리 마우스 이동시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void headerBorder_MouseMove(object sender, MouseEventArgs e)
        {
            if(this.WindowState != WindowState.Maximized)
            {
                return;
            }

            if(Mouse.LeftButton != MouseButtonState.Pressed)
            {
                return;
            }

            this.WindowState = WindowState.Normal;

            this.Left = GetWindowLeft();
            this.Top  = 1;

            this.DragMove();
        }

        #endregion
        #region 헤더 테두리 마우스 왼쪽 버튼 DOWN 처리하기 - headerBorder_MouseLeftButtonDown(sender, e)

        /// <summary>
        /// 헤더 테두리 마우스 왼쪽 버튼 DOWN 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void headerBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if(e.ClickCount == 2)
            {
                SwitchState();
            }

            if((this.ResizeMode == ResizeMode.CanResize) || (this.ResizeMode == ResizeMode.CanResizeWithGrip))
            {
                try
                {
                    this.DragMove();
                }
                catch(Exception exception)
                {
                    Debug.WriteLine(exception);
                }
            }
        }

        #endregion
        #region 최소화 버튼 클릭시 처리하기 - minimizedButton_Click(sender, e)

        /// <summary>
        /// 최소화 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void minimizedButton_Click(object sender, RoutedEventArgs e)
        {
            this.WindowState = WindowState.Minimized;
        }

        #endregion
        #region 최대화 버튼 클릭시 처리하기 - maximizedButton_Click(sender, e)

        /// <summary>
        /// 최대화 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void maximizedButton_Click(object sender, RoutedEventArgs e)
        {
            if(WindowState == WindowState.Maximized)
            {
                WindowState = WindowState.Normal;
            }
            else
            {
                WindowState = WindowState.Maximized;
            }
        }

        #endregion
        #region 닫기 버튼 클릭시 처리하기 - closeButton_Click(sender, e)

        /// <summary>
        /// 닫기 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void closeButton_Click(object sender, RoutedEventArgs e)
        {
            Close();
        }

        #endregion

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

        #region 최대화 상태 설정하기 - SetMaximizedState()

        /// <summary>
        /// 최대화 상태 설정하기
        /// </summary>
        private void SetMaximizedState()
        {
            this.headerBorder.MouseMove += headerBorder_MouseMove;
        }

        #endregion
        #region 일반 또는 최소화 상태 설정하기 - SetNormalOrMinimizedState()

        /// <summary>
        /// 일반 또는 최소화 상태 설정하기
        /// </summary>
        private void SetNormalOrMinimizedState()
        {
            this.headerBorder.MouseMove -= headerBorder_MouseMove;
        }

        #endregion
        #region 윈도우 왼쪽 구하기 - GetWindowLeft()

        /// <summary>
        /// 윈도우 왼쪽 구하기
        /// </summary>
        /// <returns>윈도우 왼쪽</returns>
        private double GetWindowLeft()
        {
            ScreenManager screenManager = ScreenManager.GetScreenManager(this);

            double leftBound  = screenManager.DesktopArea.Left;
            double rightBound = screenManager.DesktopArea.Right;

            Point currentPoint = GetMousePosition();

            double left = currentPoint.X - (this.Width / 2);

            if(left < leftBound)
            {
                return leftBound;
            }

            double right = currentPoint.X + (this.Width / 2);

            if(right > rightBound)
            {
                return rightBound - this.Width;
            }

            return left;
        }

        #endregion
        #region 마우스 위치 구하기 - GetMousePosition()

        /// <summary>
        /// 마우스 위치 구하기
        /// </summary>
        /// <returns>마우스 위치</returns>
        private Point GetMousePosition()
        {
            System.Drawing.Point point = System.Windows.Forms.Control.MousePosition;

            return new Point(point.X, point.Y);
        }

        #endregion
        #region 상태 전화하기 - SwitchState()

        /// <summary>
        /// 상태 전화하기
        /// </summary>
        private void SwitchState()
        {
            switch(WindowState)
            {
                case WindowState.Normal    : WindowState = WindowState.Maximized; break;
                case WindowState.Maximized : WindowState = WindowState.Normal;    break;
            }
        }

        #endregion
    }
}

 

300x250

 

▶ ScreenManager.cs

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Interop;

namespace TestProject
{
    /// <summary>
    /// 화면 관리자
    /// </summary>
    public class ScreenManager
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 화면
        /// </summary>
        private readonly Screen screen;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 주 화면 관리자 - Primary

        /// <summary>
        /// 주 화면 관리자
        /// </summary>
        public static ScreenManager Primary
        {
            get
            {
                return new ScreenManager(Screen.PrimaryScreen);
            }
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Instance
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 데스크톱 영역 - DesktopArea

        /// <summary>
        /// 데스크톱 영역
        /// </summary>
        public Rect DesktopArea
        {
            get
            {
                return GetRect(this.screen.Bounds);
            }
        }

        #endregion
        #region 작업 영역 - WorkingArea

        /// <summary>
        /// 작업 영역
        /// </summary>
        public Rect WorkingArea
        {
            get
            {
                return GetRect(this.screen.WorkingArea);
            }
        }

        #endregion
        #region 주 화면 여부 - IsPrimary

        /// <summary>
        /// 주 화면 여부
        /// </summary>
        public bool IsPrimary
        {
            get
            {
                return this.screen.Primary;
            }
        }

        #endregion
        #region 장치명 - DeviceName

        /// <summary>
        /// 장치명
        /// </summary>
        public string DeviceName
        {
            get
            {
                return this.screen.DeviceName;
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 모든 화면 관리자들 구하기 - GetAllScreenManagers()

        /// <summary>
        /// 모든 화면 관리자들 구하기
        /// </summary>
        /// <returns>모든 화면 관리자들</returns>
        public static IEnumerable<ScreenManager> GetAllScreenManagers()
        {
            foreach(Screen screen in Screen.AllScreens)
            {
                yield return new ScreenManager(screen);
            }
        }

        #endregion
        #region 화면 관리자 구하기 - GetScreenManager(window)

        /// <summary>
        /// 화면 관리자 구하기
        /// </summary>
        /// <param name="window">윈도우</param>
        /// <returns>화면 관리자</returns>
        public static ScreenManager GetScreenManager(Window window)
        {
            WindowInteropHelper windowInteropHelper = new WindowInteropHelper(window);

            Screen screen = Screen.FromHandle(windowInteropHelper.Handle);

            ScreenManager screenManager = new ScreenManager(screen);

            return screenManager;
        }

        #endregion
        #region 화면 관리자 구하기 - GetScreenManager(sourcePoint)

        /// <summary>
        /// 화면 관리자 구하기
        /// </summary>
        /// <param name="sourcePoint">소스 포인트</param>
        /// <returns>화면 관리자</returns>
        public static ScreenManager GetScreenManager(System.Windows.Point sourcePoint)
        {
            int sourceX = (int)Math.Round(sourcePoint.X);
            int sourceY = (int)Math.Round(sourcePoint.Y);
            
            System.Drawing.Point targetPoint = new System.Drawing.Point(sourceX, sourceY);

            Screen screen = Screen.FromPoint(targetPoint);

            ScreenManager screenManager = new ScreenManager(screen);

            return screenManager;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Instance
        //////////////////////////////////////////////////////////////////////////////// Internal

        #region 생성자 - ScreenManager(screen)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="screen">화면</param>
        internal ScreenManager(Screen screen)
        {
            this.screen = screen;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 윈도우 시작 위치 설정하기 - SetWindowStartupPosition(window)

        /// <summary>
        /// 윈도우 시작 위치 설정하기
        /// </summary>
        /// <param name="window">윈도우</param>
        public static void SetWindowStartupPosition(Window window)
        {
            if(window.WindowStartupLocation == WindowStartupLocation.Manual)
            {
                return;
            }

            switch(window.WindowStartupLocation)
            {
                case WindowStartupLocation.CenterOwner :

                    Window ownerWindow = window.Owner;

                    if(ownerWindow == null)
                    {
                        return;
                    }

                    SetWindowCenterLocation(window, new Rect(ownerWindow.Left, ownerWindow.Top, ownerWindow.Width, ownerWindow.Height));

                    break;

                case WindowStartupLocation.CenterScreen :

                    ScreenManager screenManager = ScreenManager.GetScreenManager(window);

                    SetWindowCenterLocation(window, screenManager.WorkingArea);

                    break;
            }

            window.Visibility = Visibility.Visible;
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region WPF 사각형 구하기 - GetRect(rectangle)

        /// <summary>
        /// WPF 사각형 구하기
        /// </summary>
        /// <param name="rectangle">WinForm 사각형</param>
        /// <returns>WPF 사각형</returns>
        private Rect GetRect(Rectangle rectangle)
        {
            return new Rect
            {
                X      = rectangle.X,
                Y      = rectangle.Y,
                Width  = rectangle.Width,
                Height = rectangle.Height
            };
        }

        #endregion
        #region 윈도우 중앙 위치 설정하기 - SetWindowCenterLocation(window, sourceRect)

        /// <summary>
        /// 윈도우 중앙 위치 설정하기
        /// </summary>
        /// <param name="window">윈도우</param>
        /// <param name="sourceRect">소스 사각형</param>
        private static void SetWindowCenterLocation(Window window, Rect sourceRect)
        {
            var centerLeft = sourceRect.X + (sourceRect.Width  / 2);
            var centerTop  = sourceRect.Y + (sourceRect.Height / 2);

            window.Left = centerLeft - (window.Width  / 2);
            window.Top  = centerTop  - (window.Height / 2);
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요