Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 网格不';使用DataTemplate时,请不要填充可用空间_C#_Wpf_Datagrid - Fatal编程技术网

C# 网格不';使用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

我有一个ActiPro主题的DataGrid(继承自WPF DataGrid)。 我正在使用网格设置header DataTemplate,但它没有占用所有可用空间。 这是我的数据模板

    <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"}"