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

ダイアログ ボックスを設計してマップ アプリケーションに表示する場合、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 パラメータ、のどちらかまたは両方のパラメータにイベント ハンドラを渡します。

6/8/2012