无论我尝试什么解决方案,为什么我的DataGrid会关闭屏幕?

时间:2017-09-10 03:22:11

标签: c# wpf xaml layout datagrid

我是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}} - 它不起作用。我尝试了HeightGrid.RowDefinition Height = "*" - 它没有用。 "1*"也没有用。

那么我错过了什么?

编辑:也许我还应该说这是在帧标记内调用的VerticalAlignment = "Stretch"文件中。不知道这是否有所作为。

Page

1 个答案:

答案 0 :(得分:1)

摆脱DockPanelGrid是一个更灵活的控件容器,您根本不需要将容器打包到容器中。仅这一点应该可以解决问题。

好的做法是根本不使用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