4

3つの要素を含むDockPanelで満たされたウィンドウがあり、上部にドッキングされたMenuBar、下部にドッキングされたStatusBar、および本体を埋めるTabControlがあります。

少なくとも、TabControlで本文を埋めてほしいです。ビジュアルデザイナでは、TabControlとStatusBarは上下ではなく並べて配置されます。アプリケーションを実行すると、TabControlが展開され、MenuBarの下のDockPanelがいっぱいになり、StatusBarが消えます。(親ウィンドウの表示されているキャンバスから押し出されていると思います。)

この推奨事項に従って、垂直方向と水平方向の配置を設定してみました。StatusBarでZIndexを設定してみました。スタックパネルを使用してみました(DockPanel内にドッキングされているものとDockPanelを交換しているものの両方)。無駄にすべて:-(

以下は、DockPanelのレンダリングに使用しているXAMLの抜粋です。私が間違っていることについて何か提案はありますか?DockPanelを使用するよりもこれを行うためのより良い方法はありますか?

    <DockPanel>
    <Menu Name="_menu" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Top" DockPanel.Dock="Top">
        <MenuItem Header="_User Maintenance">
        </MenuItem>
    </Menu>
    <TabControl 
        x:Name="_panel" 
        ItemsSource="{Binding Path=AllTabs}" 
        Margin="0,0,0,0" 
        Visibility="{Binding Path=Visibility}" 
        DockPanel.Dock="Top"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Stretch"
        >
    </TabControl>
    <StatusBar Name="_statusBar" DockPanel.Dock="Bottom" Margin="0,0,0,0" VerticalAlignment="Bottom">
        <StatusBar.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="26"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                </Grid>
            </ItemsPanelTemplate>
        </StatusBar.ItemsPanel>
        <StatusBarItem Grid.Column="0" Grid.Row="0">
            <ProgressBar Name="_progressBar" Height="20" IsIndeterminate="True" Margin="4,0,4,0" VerticalAlignment="Top" Width="600"/>
        </StatusBarItem>
    </StatusBar>
</DockPanel>

編集:

DockPanel.Dock ="Top"をHorizo​​ntalAlignmentとVerticalAlignment="Stretch"の両方とともにTabControlに追加することで、ビジュアルデザイナーでTabControlをStatusBarの横ではなく、StatusBarの上にスタックさせることができました。現在、StatusBarは、一部のTabItemの実行時にのみ表示されなくなります。

私のTabControlは、UserControlのリストを公開するViewModelにデータバインドされています。各UserControlには、独自のデータバインドされたDataGrid(および通常は他のいくつかのコントロール)が含まれています。DataGridが数行しか表示しないタブでは、TabControlとTabItemは、UserGridを含むように拡張されるだけで、ページの下部にStatusBarが表示されたままになります。DataGridに多くの行が表示されているタブでは、TabControlが伸びてウィンドウ全体に表示され、StatusBarが非表示になります。

それが役立つ場合のために、これが私のDataGrid定義です:

 <DataGrid 
        Name="_customerGrid" 
        Grid.Column="0" 
        Grid.ColumnSpan="3" 
        Grid.Row="1" 
        AutoGenerateColumns="False" 
        CanUserSortColumns="True"
        ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
        HorizontalAlignment="Left" 
        ItemsSource="{Binding Path=AllCustomers}" 
        RowDetailsVisibilityMode="VisibleWhenSelected"
        RowStyle="{StaticResource DataGridRowStyle}"
        SelectionUnit="FullRow"
        VerticalAlignment="Top">

ありがとう!

4

1 に答える 1

9

DockPanelは、アイテムが追加される順序によって異なります。残りのスペースを占めるアイテムを追加する前に、最初にドッキングされたアイテムを追加する必要があります。あなたの場合、あなたはただあなたのアイテムをこのようなものに再配置する必要があるでしょう:

<DockPanel>
  <Menu DockPanel.Dock="Top".../>
  <StatusBar DockPanel.Dock="Bottom".../>
  <TabControl/>
</DockPanel>
于 2010-10-19T19:34:37.830 に答える