Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF页面->;画布->;TabControl->;TabItem->;网格->;DataGrid不显示垂直滚动条_C#_Wpf_Xaml_Datagrid_Scrollbar - Fatal编程技术网

C# WPF页面->;画布->;TabControl->;TabItem->;网格->;DataGrid不显示垂直滚动条

C# WPF页面->;画布->;TabControl->;TabItem->;网格->;DataGrid不显示垂直滚动条,c#,wpf,xaml,datagrid,scrollbar,C#,Wpf,Xaml,Datagrid,Scrollbar,好的,我也遇到了“垂直滚动条不显示”的问题,建议的解决方案要么不起作用,要么不适用于这种情况 这样做的目的不是显示一个数据网格,而是并排显示两个数据网格,每个数据网格在应用程序上都有自己的数据源,可以正确响应用户的大小调整,这意味着网格将按预期进行扩展和收缩。网格应该被“锚定”并相应地渲染(哦,我多么怀念WinForms和实际简单锚定的日子啊!) 第一个网格通常不会显示足够的行来触发垂直滚动条,这没关系 第二个数据网格的内容基于第一个数据网格的选定行,这意味着当用户在第一个数据网格(第0列)中选

好的,我也遇到了“垂直滚动条不显示”的问题,建议的解决方案要么不起作用,要么不适用于这种情况

这样做的目的不是显示一个数据网格,而是并排显示两个数据网格,每个数据网格在应用程序上都有自己的数据源,可以正确响应用户的大小调整,这意味着网格将按预期进行扩展和收缩。网格应该被“锚定”并相应地渲染(哦,我多么怀念WinForms和实际简单锚定的日子啊!)

第一个网格通常不会显示足够的行来触发垂直滚动条,这没关系

第二个数据网格的内容基于第一个数据网格的选定行,这意味着当用户在第一个数据网格(第0列)中选择一行时,将执行一条SQL语句,结果显示在另一个数据网格(第1列)中

实际情况是,如果第二个网格的内容大于显示的大小,将继续渲染(看不见),将页面容器项(底部的状态栏,代码中未显示)推到一边,并继续渲染应用程序边界之外的内容(不可见,但栅格的行为就像它有无限的显示空间一样)

我没有得到的是一个漂亮的页面网格和一个垂直滚动条

我使用MVVMLight作为工具包,相应的ViewModel按设计工作。数据不是问题,只是渲染

我很确定这个解决方案很简单,只是我还没有xaml经验(我是这方面的新手)来解决这个问题。我尝试过将网格封装在其他各种容器中(DockPanel、StackPanel with orientation=Horizontal,等等)我甚至尝试将行高度绑定到选项卡控件实际高度-失败

因此,如果您能提供一些指导说明,将不胜感激

以下是页面的完整xaml(除了我删除了无关的选项卡页面外):

    <Page x:Class="GetSchemaExplorerMsSqlSvr.DbMetaDataPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:GetSchemaExplorerMsSqlSvr"
      xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
      xmlns:command="http://www.galasoft.ch/mvvmlight"
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="500"
      Height="Auto"
            Width="Auto"
      Title="DbMetaDataPage"
            x:Name="pgDbMetaDataPage"
      Background="{StaticResource YellowBackground}"
      DataContext="{Binding MainWindowVM, Source={StaticResource Locator}}"
      >
  <Canvas>
    <TabControl x:Name="tcDbMetaData" Height="Auto"  Width="Auto">
            <TabItem x:Name="tiDbMetaData" Header="Get Schema" VerticalAlignment="Stretch">
                <Grid Margin="1,1,1,1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <DataGrid
                        Grid.Column="0"
                        x:Name="dgDbMetaData"
                        ItemsSource="{Binding Path=GetSchemaMetaData, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
                        IsReadOnly="True"
                        SelectedItem="{Binding Path=SelectedMetaDataItem, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                    />
                    <DataGrid
                        Grid.Column="1"
                        ItemsSource="{Binding Path=MetaDataCollectionInfo, Mode=OneWay}" 
                        IsReadOnly="True"
                        VerticalScrollBarVisibility="Auto"
                    />
                </Grid>
            </TabItem>
    </TabControl>
  </Canvas>
</Page>

之所以会发生这种情况,是因为您正在将TabControl设置为画布的子元素。它用于设置其子元素的隐藏位置。由于您不需要设置隐藏位置,您只需移除画布,并将页面内容直接设置为TabControl即可

从MSDN:

画布的子元素总是按其所需的完整大小指定。因此,垂直对齐和水平对齐在画布内没有任何效果

()

您的代码将是:

<Page...>
    <TabControl ...>
        <TabItem ...>
           <Grid ...>
               <DataGrid Grid.Column="0".../>
               <DataGrid Grid.Column="1" .../>
           </Grid>
        </TabItem>
     </TabControl>
</Page>

之所以会发生这种情况,是因为您正在将TabControl设置为画布的子元素。它用于设置其子元素的隐藏位置。由于您不需要设置隐藏位置,您只需移除画布,并将页面内容直接设置为TabControl即可

从MSDN:

画布的子元素总是按其所需的完整大小指定。因此,垂直对齐和水平对齐在画布内没有任何效果

()

您的代码将是:

<Page...>
    <TabControl ...>
        <TabItem ...>
           <Grid ...>
               <DataGrid Grid.Column="0".../>
               <DataGrid Grid.Column="1" .../>
           </Grid>
        </TabItem>
     </TabControl>
</Page>

如上所述,删除Canvas元素解决了问题。修改后的xaml发布在下面只是为了参考。结果并不漂亮,但现在我正在寻找函数,这就解决了问题

<Page x:Class="GetSchemaExplorerMsSqlSvr.DbMetaDataPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:GetSchemaExplorerMsSqlSvr"
      xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
      xmlns:command="http://www.galasoft.ch/mvvmlight"
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="500"
      Height="Auto"
            Width="Auto"
      Title="DbMetaDataPage"
            x:Name="pgDbMetaDataPage"
      Background="{StaticResource YellowBackground}"
      DataContext="{Binding MainWindowVM, Source={StaticResource Locator}}"
      >
    <TabControl x:Name="tcDbMetaData" Height="Auto"  Width="Auto">
        <TabItem x:Name="tiDbMetaData" Header="Get Schema" VerticalAlignment="Stretch">
            <DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">

                <Grid DockPanel.Dock="Top" Background="{StaticResource YellowBackground}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition MaxHeight="40"/>
                    </Grid.RowDefinitions>
                    <DataGrid
                        Grid.Row="0"
                        Grid.Column="0"
                        x:Name="dgDbMetaData"
                        ItemsSource="{Binding Path=GetSchemaMetaData, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
                        IsReadOnly="True"
                        SelectedItem="{Binding Path=SelectedMetaDataItem, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                    />
                    <DataGrid
                        Grid.Row="0"
                        Grid.Column="1"
                        ItemsSource="{Binding Path=MetaDataCollectionInfo, Mode=OneWay}" 
                        IsReadOnly="True"
                        VerticalScrollBarVisibility="Auto"
                    />
                    <Button Grid.Column="0" Grid.Row="1" MaxHeight="30" Margin="5, 5, 5, 5" Content="Fetch MetaData"/>
                </Grid>
            </DockPanel>
        </TabItem>
        <TabItem Header="Tables">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Header="Views">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Header="Stored Procedures">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Header="Functions">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
    </TabControl>

</Page>

如上所述,删除Canvas元素解决了问题。修改后的xaml发布在下面只是为了参考。结果并不漂亮,但现在我正在寻找函数,这就解决了问题

<Page x:Class="GetSchemaExplorerMsSqlSvr.DbMetaDataPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:GetSchemaExplorerMsSqlSvr"
      xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
      xmlns:command="http://www.galasoft.ch/mvvmlight"
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="500"
      Height="Auto"
            Width="Auto"
      Title="DbMetaDataPage"
            x:Name="pgDbMetaDataPage"
      Background="{StaticResource YellowBackground}"
      DataContext="{Binding MainWindowVM, Source={StaticResource Locator}}"
      >
    <TabControl x:Name="tcDbMetaData" Height="Auto"  Width="Auto">
        <TabItem x:Name="tiDbMetaData" Header="Get Schema" VerticalAlignment="Stretch">
            <DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">

                <Grid DockPanel.Dock="Top" Background="{StaticResource YellowBackground}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition MaxHeight="40"/>
                    </Grid.RowDefinitions>
                    <DataGrid
                        Grid.Row="0"
                        Grid.Column="0"
                        x:Name="dgDbMetaData"
                        ItemsSource="{Binding Path=GetSchemaMetaData, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
                        IsReadOnly="True"
                        SelectedItem="{Binding Path=SelectedMetaDataItem, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                    />
                    <DataGrid
                        Grid.Row="0"
                        Grid.Column="1"
                        ItemsSource="{Binding Path=MetaDataCollectionInfo, Mode=OneWay}" 
                        IsReadOnly="True"
                        VerticalScrollBarVisibility="Auto"
                    />
                    <Button Grid.Column="0" Grid.Row="1" MaxHeight="30" Margin="5, 5, 5, 5" Content="Fetch MetaData"/>
                </Grid>
            </DockPanel>
        </TabItem>
        <TabItem Header="Tables">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Header="Views">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Header="Stored Procedures">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Header="Functions">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
    </TabControl>

</Page>


Ha!算了算了吧!我自己才发现了这一点,我要胜利地吹嘘我的成功,却发现了这个答案。谢谢你的快速回答和正确答案。你被标记为答案!哈!算了算了吧!我才发现了这一点,我要胜利地吹嘘我的成功,却发现了这个答案。谢谢感谢您的快速回答和正确答案。您将被标记为答案!