2017-11-10 4 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メソッドにパラメータ(列挙)を渡して、カスタムメッセージボックスにメイン画面内のどこに配置するかを指定します。

  • 左上
  • トップセンター
  • 右上
  • 左中央
  • 中東センター
  • 右中央
  • ボトン左
  • ボトムセンター
  • :パラメータは、これらのだろう
  • ボトム右

どうすればいいですか?

+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

WpfMessageBoxの 'Show'メソッドに対して、親ウィンドウ(Window)と列挙TopLeft、TopMiddleなどを引数として渡します。 '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

関連する問題