【发布时间】:2018-02-18 14:11:22
【问题描述】:
我是 C# 和 WPF 的新手,试图获得我认为简单的东西,但它不起作用。
我有一个由 SQL 填充的数据网格,无论我尝试什么,我都无法让 DataGrid 的 Height 留在窗口内。它总是向下延伸。我希望它对窗口大小是动态的。
下面是我非常简单的代码,或者至少是最近的一次迭代。
<Page x:Class="TMSMaintenance.PaymentError"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TMSMaintenance"
Title="PaymentError">
<!--<DataGrid Name="MydataGrid" CanUserAddRows="False" SelectionMode="Single" />-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<DockPanel Grid.Row="0" VerticalAlignment="Stretch" >
<DataGrid x:Name="MydataGrid"
VerticalAlignment="Stretch"
MinHeight="100"
VerticalScrollBarVisibility="Auto" VerticalContentAlignment="Stretch">
</DataGrid>
</DockPanel>
</Grid>
</Page>
我已经尝试使用ScrollView 进行包装——它没有用。我尝试通过将Height 绑定到窗口来设置它 - 它不起作用。我试过Grid.RowDefinition Height = "*" 和"1*" - 它没有用。 VerticalAlignment = "Stretch" 也没有用。
那么我错过了什么?
编辑:也许我还应该说这是在框架标签内调用的Page 文件上。不确定它是否在这里有所作为。
<StackPanel CanVerticallyScroll="True" CanHorizontallyScroll="True">
<!-- Navigation -->
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
<Button Content="Files Lookup" Margin="0,0,10,0"/>
<Button Content="Payment Error" Margin="0,0,10,0"/>
<Button Content="Carrier Maintenance" Margin="0,0,10,0"/>
<Button Content="Payment File" Margin="0,0,10,0" />
</StackPanel>
<ScrollViewer>
<Frame x:Name="MainFrame" NavigationUIVisibility="Hidden" ></Frame>
</ScrollViewer>
</StackPanel>
【问题讨论】:
-
您放入(垂直)StackPanel 的任何内容都不会垂直调整大小。 StackPanel 只是根据其子元素的需要进行扩展。将您的 Frame 放入 Grid 或 DockPanel。除此之外,设置 StackPanel 的 CanVerticallyScroll 和 CanHorizontallyScroll 属性没有任何效果。阅读各自文档页面上的备注。
-
我编辑了你的问题。首先,我从标题中删除了强制标签 - 请参阅 here 为什么。然后,我将您的示例代码更改为 minimal(请参阅minimal reproducible example)。您的示例不应包含任何与您询问的内容无关的代码。
-
感谢@Clemens 提供的信息,我在探索选项时读到了自己的信息,但我的数据网格不在堆栈面板中,所以我认为这不是问题所在。我确实尝试了此代码的一个版本,其中我删除了堆栈面板及其所有内容,但没有任何区别。
-
@Clemens,我现在明白你对堆栈面板的意思了,主窗口上的那个就是你所指的我想的。所以忽略我之前的评论。
标签: c# wpf xaml layout datagrid