我是C#和WPF的新手,试图获得我认为简单的东西,但它不起作用。
我有一个由SQL填充的数据网格,无论我尝试什么,我都无法让Height
的{{1}}留在窗口内。它总是向下延伸。我希望它对窗口大小是动态的。
我的非常简单的代码在下面,或者至少是最近的迭代。
DataGrid
我试过用<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
绑定到窗口来设置{ - 1}} - 它不起作用。我尝试了Height
和Grid.RowDefinition Height = "*"
- 它没有用。 "1*"
也没有用。
那么我错过了什么?
编辑:也许我还应该说这是在帧标记内调用的VerticalAlignment = "Stretch"
文件中。不知道这是否有所作为。
Page
答案 0 :(得分:1)
摆脱DockPanel
。 Grid
是一个更灵活的控件容器,您根本不需要将容器打包到容器中。仅这一点应该可以解决问题。
好的做法是根本不使用DockPanels
。决不。使用DockPanels
可以实现Grids
所能达到的一切(使用更多编码,但它可以为您提供更灵活的解决方案和更好的代码可维护性)。
同时摆脱VerticalContentAlignment
(在您描述的情况下不需要)并且您不需要将VerticalAlignment
(也不是HorizontalAlignment
)定义为Stretch,因为它&#39 ; sa该属性的默认值。
修改强>
我还没有注意到你的第二个代码示例。我之前编写的所有内容仍然适用,并且会使您的代码更好,但我认为您的问题是将Page
嵌套在主容器中(Window
或其他任何内容)。
尝试更换:
<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>
要:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0"
Orientation="Horizontal"
Margin="0,10,0,0">
<StackPanel.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Margin" Value="0,0,10,0" />
</Style>
</StackPanel.Resources>
<Button Content="Files Lookup"/>
<Button Content="Payment Error"/>
<Button Content="Carrier Maintenance"/>
<Button Content="Payment File"/>
</StackPanel>
<Frame x:Name="MainFrame"
Grid.Row="1"
NavigationUIVisibility="Hidden" />
</Grid>
我还在Buttons
上简化了您的样式,我建议您将Page
更改为UserControl
。