好吧,我也遇到过“垂直滚动条未显示”问题,建议的解决方案不起作用或在这种情况下不适用。
希望不是一个,而是两个数据网格并排显示,每个数据网格都有一个应用程序自己的数据源,它将正确响应用户调整大小,这意味着网格将按预期扩展和收缩。网格应该“锚定”并相应地渲染(哦,我多么想念WinForms的日子和实际的,简单的锚定!)。
第一个网格通常会显示不足的行来触发垂直滚动条,这没关系。
第二个datagrids的内容基于第一个数据网格的选定行,这意味着当用户在第一个数据网格(第0列)中选择一行时,将执行SQL语句,结果显示在其他数据网格中(第1列中的一个)。
如果第二个网格的内容大于显示的大小,则会继续呈现(视线外)推送页面容器项目(底部的状态栏,代码中未显示)一边继续渲染应用程序边界(不可见,但网格的行为就像它有无限的显示空间)。
我没有得到的是带有垂直滚动条的漂亮的分页网格。
我正在使用MVVMLight作为工具包,相应的ViewModel按设计工作。数据不是问题,只是渲染。
我很确定解决方案非常简单,我只是没有xaml经验(我是这个的新手)来弄明白。我已经尝试将网格封装在各种其他容器中(DockPanel,StackPanel,方向=水平等),但似乎无法正确。我甚至尝试将行高绑定到制表符控制实际高度 - 失败。
所以...对教程解释的一点帮助将不胜感激!
以下是该页面的完整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>
答案 0 :(得分:1)
这种情况正在发生,因为您将TabControl设置为画布的子项。它用于设置其子元素的绝对定位。由于您不需要设置绝对位置,因此您应该删除您的Canvas并将您的Page的内容直接设置为TabControl。
来自MSDN:
Canvas的子元素总是按照他们想要的大小给出。因此,垂直对齐和水平对齐在画布内无效。
(https://msdn.microsoft.com/en-us/library/system.windows.controls.canvas%28v=vs.110%29.aspx)
您的代码将是:
<Page...>
<TabControl ...>
<TabItem ...>
<Grid ...>
<DataGrid Grid.Column="0".../>
<DataGrid Grid.Column="1" .../>
</Grid>
</TabItem>
</TabControl>
</Page>
答案 1 :(得分:0)
正如上面所指出的,删除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>