1

我有以下布局

<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 的滚动条出现。

4

3 回答 3

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没有更新。不过现在已经足够好了。

于 2012-10-18T15:41:50.147 回答
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 中的可用空间。但我不确定这正是您正在寻找的。

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

于 2012-10-18T14:24:09.157 回答
0

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

选项卡控件将与任何选项卡项一起在其容器内展开。通过将网格作为其容器并指定要*调整大小的行/列(在窗口内扩展),这将向下渗透到数据网格。

<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"
            />

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

水平尺寸 垂直尺寸

于 2019-01-06T19:06:22.667 回答