C# 网格不';使用DataTemplate时,请不要填充可用空间
我有一个ActiPro主题的DataGrid(继承自WPF DataGrid)。 我正在使用网格设置header DataTemplate,但它没有占用所有可用空间。 这是我的数据模板C# 网格不';使用DataTemplate时,请不要填充可用空间,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个ActiPro主题的DataGrid(继承自WPF DataGrid)。 我正在使用网格设置header DataTemplate,但它没有占用所有可用空间。 这是我的数据模板 <DataTemplate x:Key="MyKey" DataType="ViewModels:FieldVM"> <Border BorderThickness="1" BorderBrush="Red"> <Grid Vertic
<DataTemplate x:Key="MyKey" DataType="ViewModels:FieldVM">
<Border BorderThickness="1" BorderBrush="Red">
<Grid VerticalAlignment="Stretch" >
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Label}" DockPanel.Dock="Top" HorizontalAlignment="Center" Grid.Row="0"/>
<Border Grid.Row="1" BorderBrush="Black" BorderThickness="1,0,0,0" Background="{x:Null}" />
<local:MyUserControl Name="units" VerticalAlignment="Bottom" DockPanel.Dock="Bottom" Visibility="Visible" Grid.Row="1"/>
</Grid>
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding AvailableUnits}" Value="{x:Null}" >
<Setter Property="Visibility" Value="Collapsed" TargetName="units" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsUnitAware, RelativeSource={RelativeSource AncestorType={x:Type local:UnitConversionGrid}}}" Value="False" >
<Setter Property="Visibility" Value="Collapsed" TargetName="units" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
如何使列中的行与较大行的高度一致
谢谢
另一个简化示例:
<Window x:Class="DataGridTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:controls="clr-namespace:ActiproSoftware.Windows.Controls.DataGrid;assembly=ActiproSoftware.DataGrid.Contrib.Wpf"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
<controls:ThemedDataGrid x:Name="dataGrid" Grid.Row="0" Margin="0,0,10,0" VerticalAlignment="Top" RenderTransformOrigin="-10.556,-1.744" HorizontalAlignment="Right" Width="507" Height="310">
<DataGrid.Columns>
<DataGridCheckBoxColumn Width="50">
<DataGridCheckBoxColumn.Header>
<Grid VerticalAlignment="Stretch" Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridColumnHeader}}, Path=Height}">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock TextWrapping="Wrap" Width="40" DockPanel.Dock="Top">Value1 Test</TextBlock>
<ComboBox Grid.Row="1" Visibility="Collapsed"/>
</Grid>
</DataGridCheckBoxColumn.Header>
</DataGridCheckBoxColumn>
<DataGridCheckBoxColumn>
<DataGridCheckBoxColumn.Header>
<Grid VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock TextWrapping="Wrap" Width="50">Value2 Test With Four Lines</TextBlock>
<ComboBox Grid.Row="1"/>
</Grid>
</DataGridCheckBoxColumn.Header>
</DataGridCheckBoxColumn>
<DataGridCheckBoxColumn>
<DataGridCheckBoxColumn.Header>
<Grid VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="Value3" HorizontalAlignment="Center" DockPanel.Dock="Top" Grid.Row="0"/>
<ComboBox VerticalAlignment="Bottom" Grid.Row="1" Margin="0,1"/>
</Grid>
</DataGridCheckBoxColumn.Header>
</DataGridCheckBoxColumn>
</DataGrid.Columns>
</controls:ThemedDataGrid>
</Grid>
</Window>
值1测试
值2四行测试
首先,检查以确保您的DataGrid与您认为的一样大(标题实际上可能已正确填充)
接下来,尝试将网格的宽度属性绑定到DataGrid的宽度,如下所示:
Width="{Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}" Path="ActualWidth"}"
您可能需要对保持边框元素执行相同的操作
您的XAML还包含一些DockPanel属性,由于没有dock panel容器,这些属性似乎不合适。这不应该破坏任何东西,但无论如何,你可能想要移除它 可能通过更改或删除共享大小组A,将其完全删除,它们将延伸到整个容器。@eranotzap我已经尝试过,但没有使用SharedSizeGroup属性,但没有成功,每列的网格高度不同。@第二行是UserControl而不是标准WPF combobox不知道我想说combobox的位置。您有列,而行甚至没有对齐。你能发张照片吗?你试过用DockPanel替换网格吗?我想你的方向是对的,但是这使得标题占据了整个DataGrid的高度(我替换了你回复中的宽度),所以我的DataGrid只显示标题。我尝试在AncestorType中使用DataGridColumnHeader,但得到了相同的行为。应该是哪种类型的AncestorType?我添加了一个简化的示例以更好地了解问题。如果没有actipro,您可以轻松地用DataGrid替换主题DataGrid。我很清楚,在您的新示例中,问题是“较短”标题上的文本不在顶部?或者它没有跨越网格空间?其他所有内容看起来都像您的图片。问题是第一行的文本在所有列之间不对齐,第二行的内容(组合框)也不对齐。我希望这样做的方式是将第一行中的文本与标题顶部对齐,将第二行(组合框)与标题底部对齐,以确保所有文本和组合框在列之间处于同一级别。在对其进行除格时,我浏览了VisualTree,注意到标题中的网格(在我的xaml中)在垂直对齐设置为“中心”的ContenPresenter内创建。有没有办法通过XAML改变这一点?
Width="{Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}" Path="ActualWidth"}"