我無法讓我的DataGrid將行拉伸以填充所有可用空間,只要Window處於任何大小。在這種情況下,它應該填充父網格第二行(7 *)中的所有空間。 DataGrid將始終有20行和2列。我從不想要顯示任何滾動條。WPF Datagrid行伸展以填充沒有滾動條的空間
我想在DataGrid看起來像這樣:
但是,如果窗口太短,項目將被截斷:
如果窗口過高,數據網格底部有一個醜陋的灰色區域:
這裏是XAML中:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.galasoft.ch/ignore"
xmlns:viewModel="clr-namespace:WMT.ViewModel"
xmlns:view="clr-namespace:WMT.View"
xmlns:Design="clr-namespace:WMT.Design"
xmlns:res="clr-namespace:WMT.Resources"
xmlns:local="clr-namespace:WMT"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:Custom="http://www.galasoft.ch/mvvmlight"
xmlns:debug="debug-mode"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:Converters="clr-namespace:GTP.Contracts.Converters;assembly=GTP.Contracts"
xmlns:Behaviours="clr-namespace:GTP.Contracts.Behaviours;assembly=GTP.Contracts"
x:Class="WMT.View.FRView"
mc:Ignorable="d mc"
d:DesignWidth="706"
d:DesignHeight="554"
d:DataContext="{d:DesignInstance {x:Type Design:DesignFRViewModel}, IsDesignTimeCreatable=True}" ScrollViewer.VerticalScrollBarVisibility="Disabled"
>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WMT;component/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Converters:NegateConverter x:Key="NegateConverter"/>
<System:Double x:Key="StandardWidth">240</System:Double>
<Thickness x:Key="StandardMargin">0,0,10,0</Thickness>
</ResourceDictionary>
</UserControl.Resources>
<UserControl.Background>
<ImageBrush ImageSource="/WMT;component/Images/cloud.bmp"/>
</UserControl.Background>
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="7*"/>
<RowDefinition Height="2.5*"/>
</Grid.RowDefinitions>
<DataGrid Grid.Row="1"
ItemsSource="{Binding WmtResult.Responses}"
AutoGenerateColumns="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserSortColumns="False"
GridLinesVisibility="None"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeRows="False"
RowHeaderWidth="0"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding IRPrompt.Item}"
ClipboardContentBinding="{x:Null}"
Width="3*"
Header="Word"/>
<DataGridTextColumn Binding="{Binding FRPrompt}"
ClipboardContentBinding="{x:Null}"
Width="*"
Header="Count"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
我試過一個ListView,而不是DataGrid的,但也有類似的問題。我需要在某個地方使用Viewbox嗎?讓我知道你是否需要進一步的信息。謝謝。
編輯
我試圖把DataGrid中視框裏面的瑞安Flohr的建議。這解決了DataGrid問題下的截斷問題和灰色區域。 DataGrid正確填充空間垂直,但它不會水平填充空間。
下面是更新XAML:
<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.galasoft.ch/ignore"
xmlns:viewModel="clr-namespace:WMT.ViewModel"
xmlns:view="clr-namespace:WMT.View"
xmlns:Design="clr-namespace:WMT.Design"
xmlns:res="clr-namespace:WMT.Resources"
xmlns:local="clr-namespace:WMT"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:Custom="http://www.galasoft.ch/mvvmlight"
xmlns:debug="debug-mode"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:Converters="clr-namespace:GTP.Contracts.Converters;assembly=GTP.Contracts"
xmlns:Behaviours="clr-namespace:GTP.Contracts.Behaviours;assembly=GTP.Contracts"
x:Class="WMT.View.FRView"
mc:Ignorable="d mc"
d:DesignWidth="754"
d:DesignHeight="685"
d:DataContext="{d:DesignInstance {x:Type Design:DesignFRViewModel}, IsDesignTimeCreatable=True}" ScrollViewer.VerticalScrollBarVisibility="Disabled"
>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WMT;component/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Converters:NegateConverter x:Key="NegateConverter"/>
<System:Double x:Key="StandardWidth">240</System:Double>
<Thickness x:Key="StandardMargin">0,0,10,0</Thickness>
</ResourceDictionary>
</UserControl.Resources>
<UserControl.Background>
<ImageBrush ImageSource="/WMT;component/Images/cloud.bmp"/>
</UserControl.Background>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="0.5*"/>
<RowDefinition Height="7*"/>
<RowDefinition Height="2.5*"/>
</Grid.RowDefinitions>
<Viewbox Grid.Row="1">
<DataGrid Grid.Row="1"
ItemsSource="{Binding WmtResult.Responses}"
AutoGenerateColumns="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserSortColumns="False"
GridLinesVisibility="None"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeRows="False"
RowHeaderWidth="0"
VerticalContentAlignment="Stretch"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Disabled" HorizontalContentAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding IRPrompt.Item}"
ClipboardContentBinding="{x:Null}"
Header="Word"
>
<!--<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Margin" Value="0,0,190,0" />
</Style>
</DataGridTextColumn.CellStyle>-->
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding FRPrompt}"
ClipboardContentBinding="{x:Null}"
Header="Count">
<!--<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Margin" Value="0,0,60,0" />
</Style>
</DataGridTextColumn.CellStyle>-->
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Viewbox>
</Grid>
以下是截圖:
我試圖用的HorizontalAlignment和DataGrid的HorizontalContentAlignment玩,但沒有運氣。然後,我更改了列的邊距(請參見xaml的註釋部分),但只能在窗口達到特定大小時才能獲得適當的邊距。下面是截圖時,我有邊距設置爲一個精確值(見XAML的評論CellStyle部分):
我想我也許可以使用ValueConverter的保證金綁定到但是,這看起來很不方便。
有沒有辦法用某種佈局控件替換DataGrid的內部StackPanel,它將水平填充空間?第一列應該是第二列的3倍。
變化是在高度上'Auto' –
如果什麼窗口太短,只顯示2行的行? – AnjumSKhan
我試圖瞭解你期望的結果。你是說你想要顯示所有20行,即使窗口太小,也不顯示任何滾動條? –