Visual Studio 2017 SDKでメニューなどからモーダルダイアログを出す場合に、その画面をXAMLで作ることにします。
といってもDialogWindowクラスを使うと簡単にできます。
とりあえず、プロジェクトにWPFのユーザーコントロールアイテムあたりを適当に追加します。(あとからクラスを変更するので、なんでもよい)
で、XAML側を次のように変更します。Microsoft.VisualStudio.Shell.15.0
というアセンブリにあるMicrosoft.VisualStudio.PlatformUI.DialogWindow
を使うのがポイントです。Gridの中身はサンプルで入れてますが、なんでもよいです。
<platformUi:DialogWindow x:Class="MyVisualStudio.Vsix.Views.MyDialogWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:platformUi="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.15.0" mc:Ignorable="d" WindowStartupLocation="CenterScreen" d:DesignHeight="450" d:DesignWidth="800"> <Grid> <TextBox HorizontalAlignment="Left" Height="23" Margin="191,88,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Text="{Binding Title.Value}"/> <TextBox HorizontalAlignment="Left" Height="23" Margin="191,128,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Text="{Binding Message.Value}"/> <Button Content="Button" HorizontalAlignment="Left" Margin="213,196,0,0" VerticalAlignment="Top" Width="75" Command="{Binding DeployCommand}"/> </Grid> </platformUi:DialogWindow>
コードビハインドも書き換えます。helpTopic
という引数を取るコンストラクタをオーバーライドして、これを呼び出すとヘルプボタンが表示されて、指定した文字列でF1ヘルプが有効になるのですが、F1ヘルプにコンテンツを追加する方法がまだわからないので、とりあえずこういうのがあるという紹介だけ。
using Microsoft.VisualStudio.PlatformUI; namespace MyVisualStudio.Vsix.Views { public partial class MyDialogWindow: DialogWindow { public MyDialogWindow() { InitializeComponent(); } public MyDialogWindow(string helpTopic) : base(helpTopic) { InitializeComponent(); } } }
あとはダイアログを表示する場所でViewをインスタンス化して、ShowModal
メソッドを呼べばOKです。
private void MenuItemCallback(object sender, EventArgs e) { var dialog = new DeployToOpenShiftWindow(); dialog.ShowModal(); }
以上です。