2017-11-10 17 views
-1

wpf에서 완료된 사용자 지정 메시지 상자가 있습니다.WPF 창 기본 화면 내에서 사용자 지정 시작 위치/위치 설정

사용자 정의 메시지 박스보기 XAML : 그것을 클릭하면 사용자가 버튼에서 호출 예와 같이 버튼을 클릭 할 때 내 기본 창에서

<Window x:Class="My.XAML.Controls.Windows.WpfMessageBox" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="WpfMessageBox" MinHeight="160" 
     MinWidth="420" MaxHeight="750" MaxWidth="750" 
     Background="Transparent" 
     SizeToContent="WidthAndHeight" 
     WindowStartupLocation="CenterScreen" 
     ShowInTaskbar="False" ResizeMode="NoResize" 
     WindowStyle="None" Topmost="True"> 

</Window> 

나는 메시지 박스 창 WPF이 사용자 정의를 보여줍니다

var messageBoxResult = WpfMessageBox.Show("Title", "MyMessage", 
    MessageBoxButton.YesNo, WpfMessageBox.MessageBoxImage.Warning); 

if (messageBoxResult != MessageBoxResult.Yes) return; 

* 사용자 정의 메시지 박스의 코드 숨김 xaml.cs :

public partial class WpfMessageBox : Window 
{ 
    private WpfMessageBox() 
    { 
     InitializeComponent(); 
    } 

    public static MessageBoxResult Show(string caption, string text, MessageBoxButton button, MessageBoxImage image, EnumLocation location) 
    { 
      switch (location) 
      { 
       case EnumLocation.TopLeft: 
        // Locates at top left 
        break; 
       case EnumLocation.TopCenter: 
        // Locates at top center 
        break; 
       case EnumLocation.TopRight: 
        // Locates at top right 
        break; 

       // and so on with the rest of cases: middle left, middle center, middle right, bottom left, bottom center and bottom right. 

      } 
    } 
} 

기본적으로이 사용자 지정 메시지 상자는 주 화면의 중앙에 열립니다.

지금 내가하고 싶은 것은 내 WpfMessageBox.Show 메서드에 매개 변수 (열거 형)를 전달하여 내 사용자 지정 메시지 상자에 기본 화면 내에 표시 할 위치를 지정하는 것입니다.

  • 왼쪽 위
  • 최고 센터
  • 오른쪽 상단
  • 중앙 좌측
  • 중동 센터
  • 중동 마우스 오른쪽
  • botton을 왼쪽
  • 하단 센터
  • : 매개 변수이 될 것이다
  • 하단 우측

어떻게하면됩니까?

+0

[이유] (https://msdn.microsoft.com/en-us/library/system.windows.windowstartuplocation (v = vs.110) .aspx)를 조사해야합니다. 메인 화면의 "* 처음. 그 후에는 좀 더 복잡해 지지만 [doable] (https://stackoverflow.com/q/1927540/1997232). – Sinatr

+0

창을 열기 전에 왼쪽 및 위쪽 속성을 설정하십시오. – mm8

답변

1

어떻게하면됩니까?

Manual에 윈도우의 WindowStartupLocation 속성을 설정 한 후 초기 위치를 결정하기 위해 윈도우의 LeftTop 속성을 설정합니다.

//top-left: 
WindowStartupLocation = WindowStartupLocation.Manual; 
Left = 0; 
Top = 0; 

당신은 SystemParameters.PrimaryScreenWidthSystemParameters.PrimaryScreenHeight 속성을 사용하여 예를 들어, 사용하는 값을 계산해야합니다.

+0

부모 Window (Window)와 열거 TopLeft, TopMiddle 등을 WpfMessageBox의 'Show'메소드에 인수로 전달합니다. 일단 'Show'메서드에서 자식 윈도우 (WpfMessageBox)의 Top 및 Left 속성을 사용하여 재생합니다. 하지만 내가 설정 TopRight 예를 들어, 위치의 나머지 설정하는 문제가 : WpfMessageBox.Top = parent.Top; WpfMessageBox.Left = (parent.Left + parent.Width) - WpfMessageBox.Width; 그러나이 경우에는 작동하지 않습니다. – user1624552

+0

또한 어떻게 나머지 위치를 TopCenter, TopRight, MiddleLeft, MiddleCenter (WindowStartupLocation.CenterScreen), MiddleRight, BottomLeft, BottomCenter 및 BottomRight로 설정할 수 있습니까? – user1624552

+0

다른 사람이 당신을 위해 코드를 작성하는 것이 아닙니다 ... 주 창 위치를 묻는 질문을하고 그 질문에 대답했습니다. – mm8