C# WPF页面->;画布->;TabControl->;TabItem->;网格->;DataGrid不显示垂直滚动条
好的,我也遇到了“垂直滚动条不显示”的问题,建议的解决方案要么不起作用,要么不适用于这种情况 这样做的目的不是显示一个数据网格,而是并排显示两个数据网格,每个数据网格在应用程序上都有自己的数据源,可以正确响应用户的大小调整,这意味着网格将按预期进行扩展和收缩。网格应该被“锚定”并相应地渲染(哦,我多么怀念WinForms和实际简单锚定的日子啊!) 第一个网格通常不会显示足够的行来触发垂直滚动条,这没关系 第二个数据网格的内容基于第一个数据网格的选定行,这意味着当用户在第一个数据网格(第0列)中选择一行时,将执行一条SQL语句,结果显示在另一个数据网格(第1列)中 实际情况是,如果第二个网格的内容大于显示的大小,将继续渲染(看不见),将页面容器项(底部的状态栏,代码中未显示)推到一边,并继续渲染应用程序边界之外的内容(不可见,但栅格的行为就像它有无限的显示空间一样) 我没有得到的是一个漂亮的页面网格和一个垂直滚动条 我使用MVVMLight作为工具包,相应的ViewModel按设计工作。数据不是问题,只是渲染 我很确定这个解决方案很简单,只是我还没有xaml经验(我是这方面的新手)来解决这个问题。我尝试过将网格封装在其他各种容器中(DockPanel、StackPanel with orientation=Horizontal,等等)我甚至尝试将行高度绑定到选项卡控件实际高度-失败 因此,如果您能提供一些指导说明,将不胜感激 以下是页面的完整xaml(除了我删除了无关的选项卡页面外):C# WPF页面->;画布->;TabControl->;TabItem->;网格->;DataGrid不显示垂直滚动条,c#,wpf,xaml,datagrid,scrollbar,C#,Wpf,Xaml,Datagrid,Scrollbar,好的,我也遇到了“垂直滚动条不显示”的问题,建议的解决方案要么不起作用,要么不适用于这种情况 这样做的目的不是显示一个数据网格,而是并排显示两个数据网格,每个数据网格在应用程序上都有自己的数据源,可以正确响应用户的大小调整,这意味着网格将按预期进行扩展和收缩。网格应该被“锚定”并相应地渲染(哦,我多么怀念WinForms和实际简单锚定的日子啊!) 第一个网格通常不会显示足够的行来触发垂直滚动条,这没关系 第二个数据网格的内容基于第一个数据网格的选定行,这意味着当用户在第一个数据网格(第0列)中选
<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!算了算了吧!我自己才发现了这一点,我要胜利地吹嘘我的成功,却发现了这个答案。谢谢你的快速回答和正确答案。你被标记为答案!哈!算了算了吧!我才发现了这一点,我要胜利地吹嘘我的成功,却发现了这个答案。谢谢感谢您的快速回答和正确答案。您将被标记为答案!