XAML 为什么我的WPF DataGrid的垂直滚动条在包含在Grid中时没有显示它的全宽?

olhwl3o2  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(162)

我有一个WPF用户控件,它包含一个 Package 在网格中的DataGrid。用户控件托管在我的主应用程序窗口中,位于 Package 在StackPanel中的TabControl内。
我遇到的问题是,我不能让DataGrid的垂直滚动条完全显示。它被“裁剪”,只有1/2的宽度是可见的。

这里是我的UserControl的XAML定义:

<UserControl x:Class="Sample.Views.SampleView"
             Width="{Binding RelativeSource={RelativeSource FindAncestor, 
                        AncestorType={x:Type StackPanel}},Path=ActualWidth}"
             Height="{Binding RelativeSource={RelativeSource FindAncestor, 
                        AncestorType={x:Type StackPanel}},Path=ActualHeight}">
    <Grid Name="PastDueInvoicesGrid" >
        <DataGrid Name="PastDueInvoicesDataGrid" 
                AutoGenerateColumns="False"
                Margin="0,0,0,3"  
                GridLinesVisibility="None"
                IsReadOnly="True"
                SelectionMode="Extended"
                SelectionUnit="CellOrRowHeader"
                HorizontalScrollBarVisibility="Auto"  
                VerticalScrollBarVisibility="Auto" 
                AllowDrop="False" >
        </DataGrid>
    </Grid>
</UserControl>

字符串

StackPanel/TabControl的定义如下:

<StackPanel Grid.Row="1" x:Name="stackPanelAccountDetailViewContainer"
  Orientation="Vertical">
  <TabControl x:Name="tabContainerContainer"
   TabStripPlacement="Bottom" 
   Height="{Binding Path=ActualHeight,
     RelativeSource={RelativeSource Mode=FindAncestor,
     AncestorType={x:Type StackPanel}}}"
    Width="{Binding Path=ActualWidth,
    RelativeSource={RelativeSource Mode=FindAncestor,
    AncestorType={x:Type StackPanel}}}">
   </TabControl>
</StackPanel>


我尝试了几种不同的方法,但我似乎不能让垂直滚动条显示它的全宽。它的水平边界似乎超过了容器的宽度。
如何使其正确显示?

t0ybt7op

t0ybt7op1#

不要设置TabControlUserControlWidth(或Height)。它们无论如何都会拉伸以填充父StackPanel

<StackPanel Grid.Row="1" x:Name="stackPanelAccountDetailViewContainer" Orientation="Vertical">
    <TabControl x:Name="tabContainerContainer" TabStripPlacement="Bottom">
    </TabControl>
</StackPanel>

<UserControl x:Class="Sample.Views.SampleView">
    <Grid Name="PastDueInvoicesGrid" >
        <DataGrid Name="PastDueInvoicesDataGrid" 
                AutoGenerateColumns="False"
                Margin="0,0,0,3"  
                GridLinesVisibility="None"
                IsReadOnly="True"
                SelectionMode="Extended"
                SelectionUnit="CellOrRowHeader"
                HorizontalScrollBarVisibility="Auto"  
                VerticalScrollBarVisibility="Auto" 
                AllowDrop="False" >
        </DataGrid>
    </Grid>
</UserControl>

字符串
您也可以尝试将MarginPadding添加到UserControl

<UserControl x:Class="Sample.Views.SampleView" ... Padding="5">

相关问题