如何让DataGrid填充TabItem

时间:2012-10-18 14:14:37

标签: wpf layout datagrid tabcontrol tabitem

我有以下布局

<DockPanel>
    <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="10">
        ...
    </StackPanel>
    <TabControl>
        <TabItem Header="Summary">
            <DataGrid   ItemsSource="{Binding SummaryData}"
                        CanUserAddRows="False"
                        CanUserDeleteRows="False"
                        IsReadOnly="True"
                        HeadersVisibility="Column"
                        CanUserSortColumns="False" />
        </TabItem>
        ...
    </TabControl>
</DockPanel>

如果没有DataGrid,TabControl和TabItems会完美地填充容器的其余部分,但是当我添加DataGrid时,它会展开所有内容以显示所有行和列。

编辑:更清晰

我希望DataGrid可以纵向和横向拉伸以填充TabItem。如果它需要更多空间,我想要显示DataGrid的滚动条。

3 个答案:

答案 0 :(得分:1)

我有以下要做我想做的事。

<TabItem Header="Summary" >
    <Grid x:Name="SummaryGrid">
        <DataGrid Height="{Binding ElementName=SummaryGrid, Path=ActualHeight}"
                  ItemsSource="{Binding SummaryData}"
                  CanUserAddRows="False"
                  CanUserDeleteRows="False"
                  IsReadOnly="True"
                  HeadersVisibility="Column"
                  CanUserSortColumns="False" />
    </Grid>
</TabItem>

直到我更改父面板的大小才有效。 ActualHeight未更新。现在它已经足够了。

答案 1 :(得分:0)

这是你正在寻找的行为吗?

<DockPanel>
    <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Margin="10">
        <TextBox Text="tttt" />
    </StackPanel>
    <TabControl VerticalAlignment="Top" HorizontalAlignment="Left">
        <TabItem Header="Summary">
            <DataGrid CanUserAddRows="False"
                      CanUserDeleteRows="False"
                      IsReadOnly="True"
                      HeadersVisibility="Column"
                      CanUserSortColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Column 1" Binding="{Binding}"></DataGridTextColumn>
                </DataGrid.Columns>
                <sys:String>Entry</sys:String>
            </DataGrid>
        </TabItem>
    </TabControl>
</DockPanel>

通过设置这些对齐,您可以将DataGrid拉伸到TabItem中的可用空间。但我不确定你到底在找什么。

您可以使用 VerticalAlignment Horizo​​ntalAlignment 来获得您需要的内容。 (将其设置为Top / Left / Stretch以仅获取TabItem,或DataGrid或两者都以您想要的方式拉伸)

答案 2 :(得分:0)

可接受的答案是一种解决方法...

标签控件将在其容器中扩展 以及所有标签项。通过将网格作为其容器,并指定行/列的大小为*(在窗口内扩展),可以将其滴落到datagrid。

<Grid>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="15"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="15"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
    <RowDefinition Height="15"/>            
    <RowDefinition Height="*"/>
    <RowDefinition Height="10"/> 
    <RowDefinition Height="100"/> 
    <RowDefinition Height="15"/>
</Grid.RowDefinitions>

<TabControl Name="tabOperations" 
            Grid.Row="1"
            Grid.Column="1"
            TabStripPlacement="Top" 
            Margin="0,0,0,4"
            >
    <TabItem Header="Provider Accounts" >
        <DataGrid AutoGenerateColumns="True"
                IsReadOnly="True"
                ItemsSource="{Binding ProviderAccounts}"/>
        </TabItem>
    </TabControl>
<GridSplitter Grid.Row="2"
                Height="3"
                Grid.Column="1"
                HorizontalAlignment="Stretch" />

<TextBox Grid.Row="3" Grid.Column="1"
            TextWrapping="Wrap" Text="{Binding Status}"
            Margin="0,4,0,0"
            />

因此,不管主窗口的大小如何,它都会跨越。

Horizontal Sized Vertical Sized