20

だから私は、すべて同じ基本的なレイアウトを持つ多くのウィンドウを持つアプリケーションを構築しています:

  1. メインウィンドウ
  2. 上隅のロゴ
  3. 表題欄
  4. 一番下のステータス表示器
  5. ウィンドウ固有のコントロール用の領域。

現時点では、すべてのウィンドウでこの構造を再作成する必要があります。理想的には、このレイアウトを 1 か所で、おそらく使いやすさのためにカスタム Window サブクラスにコーディングする必要があります。始める方法、または同様の問題の以前の経験についての手がかりを誰かが持っていますか?

4

4 に答える 4

35

以下に示すように、ウィンドウを対象とする新しい ControlTemplate を作成して、これを実現できます。

<ControlTemplate x:Key="WindowControlTemplate1" TargetType="{x:Type Window}">
    <Border 
        Background="{TemplateBinding Background}" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}"
        >
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="0.93*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="0.21*"/>
                <ColumnDefinition Width="0.79*"/>
            </Grid.ColumnDefinitions>

            <ContentPresenter 
                Grid.ColumnSpan="2" 
                Grid.Row="1" 
                Content="{TemplateBinding Content}" 
                ContentTemplate="{TemplateBinding ContentTemplate}"
                />
            <ResizeGrip 
                HorizontalAlignment="Right" 
                x:Name="WindowResizeGrip" 
                VerticalAlignment="Bottom" 
                IsTabStop="False" 
                Visibility="Collapsed" 
                Grid.Column="1" 
                Grid.Row="2"
                />
            <TextBlock Text="My Logo" />
            <TextBlock Grid.Column="1" Text="My Title"/>
            <StatusBar Height="20" Grid.ColumnSpan="2" Grid.Row="2"/>
        </Grid>
    </Border>

    <ControlTemplate.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="ResizeMode" Value="CanResizeWithGrip"/>
                <Condition Property="WindowState" Value="Normal"/>
            </MultiTrigger.Conditions>
            <Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible"/>
        </MultiTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>
于 2009-01-08T00:40:50.543 に答える
2

最も簡単な方法は、ウィンドウ固有のコントロール用に WPF の「ページ」を作成し、メイン ウィンドウに「フレーム」を配置することです。この方法で素敵なナビゲーションを作成することもできます.

于 2009-01-07T20:00:01.500 に答える
-6

なぜ「たくさんのウィンドウ」を使用しているのですか?タブ コントロールを備えた単一のウィンドウではないのはなぜですか? それとも、ユーザー コントロールを備えた単一のウィンドウですか?

とにかく、あなたの質問に答えるために、ユーザーコントロールは、あなたが欲しいと説明している機能を手に入れたい1つの方法です。

新しいウィンドウ クラスを作成し、「ウィンドウ固有のコントロール」を配置するドック パネルにオブジェクトを埋め込むことができる「子」プロパティを持たせます。

新しいウィンドウを起動したら、ウィンドウ タイプと特定のコントロールを含むユーザー コントロールをインスタンス化し、そのユーザー コントロールをウィンドウの Children プロパティに追加してから、ウィンドウを表示します。イベント ハンドラー、DataContext、および現時点ではないものを関連付けることもできます。

于 2009-01-07T14:48:29.647 に答える