DockPanel コントロール

Last Updated 2011/09/21


DockPanel コントロールは、コントロール内部の子要素を左右上下のいずれかの端部にドッキングすることができるパネルコントロールです。Windows アプリケーションでは各コントロールのほうに Docking プロパティがありますが、WPF ではコンテナコントロールである DockPanel コントロールのほうに子要素をドッキングする機能が与えられています。


一般的な Windows アプリケーションでは、フォームの上部にメニューバーとツールバー、下部にステータスバーを配置することが多いものです。このようなコントロールの配置をする場合は、DockPanel コントロールが向いています。このコントロールを使う上でのポイントは Dock プロパティと LastChildFill プロパティです。

DockPanel

上図は、以下のコードの実行結果です。ただし、アプリケーションとしては不完全ですので、模範的なコードとは考えないでください。ここでは DockPanel コントロールの使い方を示すことが目的ですから。

<Window x:Class="DockPanelTest.Window1"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Window1" Height="300" Width="412">

  <DockPanel>
    <Menu Name="menu1" DockPanel.Dock="Top">
      <MenuItem Header="既存のファイルを開く(_F)" Width="Auto"></MenuItem>
      <MenuItem Header="上書き保存(_E)" Width="Auto"></MenuItem>
    </Menu>
    <ToolBarTray DockPanel.Dock="Top">
      <ToolBar Name="toolbar1" Height="30">
        <Button Command="Open" Width="22" Height="22" ToolTip="既存のファイルを開く">
          <Button.Content>
            <Image Source="OpenHS.png" Width="16" Height="16" Stretch="Uniform"/>
          </Button.Content>
        </Button>
        <Button Command="Save" Width="22" Height="22" ToolTip="上書き保存">
          <Button.Content>
            <Image Source="SaveHS.png" Width="16" Height="16" Stretch="Uniform"/>
          </Button.Content>
        </Button>
      </ToolBar>
    </ToolBarTray>
    <StatusBar DockPanel.Dock="Bottom" Height="30">
      <StatusBarItem>
        <TextBlock>statusBarItem1</TextBlock>
      </StatusBarItem>
      <StatusBarItem>
        <TextBlock>statusBarItem2</TextBlock>
      </StatusBarItem>
    </StatusBar>
    <TextBox></TextBox>
  </DockPanel>
</Window>

DockPanel クラスの Dock プロパティの使い方に注目してください。このプロパティは添付プロパティ、つまり、アタッチ可能なプロパティですから、Menu、ToolBarTray、StatusBar の各コントロールのプロパティであるかのようにして使うことができます。

もう一つの注目点である LastChildFill プロパティの意味ですが、これは DockPanel コントロール内に最後に配置した要素の取り扱い方を規定するものです。デフォルトでは、true ですから、最後の要素は DockPanel コントロールにほかの要素を配置したあとの残りの領域を Fill つまり、領域一杯に配置することを意味します。上記のコードでは TextBox コントロールを最後に配置していますので、ツールバーとステータスバーとの間の領域一杯に配置されています。もし、これが不都合であれば、LastChildFill プロパティに false に設定してください。

−以上−