ベスト プラクティス: ダイアログ ボックスの設計と表示

ダイアログ ボックスを設計してマップ アプリケーションに表示する場合、UI(ユーザ インタフェース)の表示方法、全体的なデザインとテーマ、既存のアプリケーション フレームワークとスムーズに統合する方法など、さまざまな要素を考慮しなければなりません。ダイアログ ボックスを閉じる直前や閉じた後、何らかの操作(マップからレイヤを削除するなど)を実行するかどうかも決める必要があります。

UI の表示

ビューア内に UI(ダイアログ ボックス)を表示するために、拡張 API には 2 つのメソッド(ShowWindow と HideWindow)が用意されています。これらのメソッドは MapApplication.Current に属しています。MapApplication.Current.ShowWindow メソッドは、フローティング ダイアログ ウィンドウに FrameworkElement を表示します。ダイアログ ボックスを開く ShowWindow メソッド には、ダイアログ ボックスのタイトルに表示する文字列を引数のオブジェクトに渡します。ShowWindow メソッドには、ダイアログ ボックスがモーダルかどうかを判断するブール値、ダイアログ ボックスを閉じる直前に呼び出されるイベント ハンドラ、ダイアログ ボックスを閉じた直後に呼び出されるイベント ハンドラを必要に応じて引数に引き渡します。ダイアログ ボックスを閉じるには、同じ FrameworkElement を MapApplication.Current.HideWindow メソッドに渡します。

コマンドを実装する場合は、該当するボタンがクリックされた直後(コマンドが実行された直後)に UI を表示します。さらに、コマンドの実行時にユーザがマップを操作する必要がある場合は、UI でそれを示さなければなりません。

ShowWindow を使用するときは、UI の背景を透明に設定してください。UI を含むダイアログ ボックスでは、アプリケーションのテーマ カラーに基づく背景色が使用されます。ただしこれは、アプリケーションを設計するユーザが変更できます。

ビューアに Silverlight UI を表示する例として、次のように、デフォルトのコードビハインドのクラスと XAML(Extensible Application Markup Language)を使用する UserControl を実装するとします。

<UserControl x:Class="MyExtension.SimpleDialog"
     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"
     mc:Ignorable="d"
     d:DesignHeight="300" d:DesignWidth="400">
     <Grid x:Name="LayoutRoot" Background="Transparent">
          <TextBlock Text="This is my Silverlight UI!" Margin="20" />
     </Grid>
</UserControl>

ツールが実行されたとき、このコントロールをダイアログ ボックスに表示するには、次のように実装します。

[Export(typeof(ICommand))]
[DisplayName("Show A Simple Dialog")]
[Category("My Tools")]
[Description("Tool to show a simple dialog")]
[DefaultIcon("<Insert path to icon>")]
public class ShowDialogCommand : ICommand
{
     private SimpleDialog dialog = null;
     public void Execute(object parameter)
     {
          // Instantiate a new dialog if one does not already exist.
          dialog = dialog ?? new SimpleDialog();
 
          // Display the dialog.
          MapApplication.Current.ShowWindow("Simple Dialog", dialog);
     }    
 
     public bool CanExecute(object parameter)
     {
          // Return true so that the command is always enabled.
          return true;
     }
 
     public event EventHandler CanExecuteChanged;
}

デフォルトのテーマのビューアでは、このダイアログは次のように表示されます。

ビューアの標準ダイアログ

レイアウトのカスタマイズ

フローティング ダイアログに表示したくない UI(パネルなど)をアプリケーションに追加するには、レイアウトをカスタマイズします。UI を常に表示する場合は、その UI をレイアウトに追加します。UI の表示/非表示をユーザが切り替えられるようにするには、次の方法があります。

  • 閉じるボタンなど、Visibility プロパティを Collapsed に設定するコントロールを UI に追加します。
  • MapApplication.Current.FindControlInLayout を使用して対象コントロールを検出するツールを作成(ICommand を実装)し、その Visibilityプロパティを Visible に設定します。
注意注意:

レイアウトに必ずしも UI が含まれるとは限らないので、FindControlInLayout が NULL を返すケースも処理できるようにしてください。

ビジュアル ツリーをプログラムから操作してエレメントをアプリケーションへ動的に追加しないでください。この方法ではビジュアル ツリーを特別な方法で構成する必要があるため不安定になります。この処理を実行するコードは、レイアウト間およびリリース間で停止する可能性があります。

詳細については、「カスタム レイアウトの作成」をご参照ください。また、ArcGIS Viewer for Silverlightインタラクティブ サンプルで、Controls セクションのサンプルもご参照ください。

ブラシ

Extensibility アセンブリには、ビューアで使用するブラシ セットが用意されています。UI に色を付けるときは、これらの組み込みブラシ セットを使用してください。標準ブラシを使用することで、UI の色とアプリケーションの色の一貫性が維持されます。また、エンド ユーザは、テーマ コントロールを使用してこれらの色を構成できます。

次のブラシを使用できます。

ダイアログ ボックスを閉じるときの処理

アドインによって表示されたウィンドウをユーザが閉じる時点で処理を実行するには、MapApplication.Current.ShowWindow メソッドの onHidingHandler パラメータ、onHideHandler パラメータ、のどちらかまたは両方のパラメータにイベント ハンドラを渡します。

11/30/2012