Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/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# 设置标头的MaxWidth时,对所有DataGridColumns应用相同的高度_C#_Wpf_Xaml - Fatal编程技术网

C# 设置标头的MaxWidth时,对所有DataGridColumns应用相同的高度

C# 设置标头的MaxWidth时,对所有DataGridColumns应用相同的高度,c#,wpf,xaml,C#,Wpf,Xaml,我有一个ItemsControl,其中包含可动态更改数量的数据网格: <ItemsControl ItemsSource="{Binding Table.Columns}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch"/>

我有一个ItemsControl,其中包含可动态更改数量的数据网格:

<ItemsControl ItemsSource="{Binding Table.Columns}">
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch"/>
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>

   <ItemsControl.ItemTemplateSelector>
      <local:ColumnTemplateSelector InputParameterColumnTemplate="{StaticResource InputParamterColumn}"
                                    SingleParameterColumnTemplate="{StaticResource SingleParameterColumn}"/>
   </ItemsControl.ItemTemplateSelector>
</ItemsControl>

“SingleParameterColumn”的模板定义如下:

    <DataTemplate x:Key="SingleParameterColumn">       
        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Cells}"      
                                   RowHeight="25" RowHeaderWidth="0" >
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding Name}"
                                           TextWrapping="Wrap"
                                           TextAlignment="Center"
                                           MaxWidth="60">
                                </TextBlock>
                                <Button>
                                    <Image ... />
                                </Button>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>
                    <DataGridTemplateColumn.CellTemplateSelector>....
                    </DataGridTemplateColumn.CellTemplateSelector>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </DataTemplate>

....
始终有一个
InputParameterColumn
和至少一个
SingleParameterColumn
InputParameterColumn
具有固定的标题名称,而
SingleParameterColumn
的标题可以任意长

由于我不希望有非常宽的列,我已将标题模板中
TextBlock
MaxWidth
定义为60,如果列的名称非常长,则标题会更高

这会导致列具有不同的高度,具体取决于标题名称的长度。


是否有任何方法可以确定ItemsControl中最高的标题有多高,然后为所有其他标题设置相同的高度,以便所有列都具有相同的大小

您可以编写附加到标题
TextBlock
的行为,并执行以下操作:

  • 订阅
    SizeChanged
    事件
  • 存储在最大尺寸的地方(静态道具或助手类…)
  • 如果此最大尺寸发生更改,只需更改行为所附着的所有元素的高度即可

我终于可以重现您的问题,并通过以下更改设法解决它:

  • 在StackPanel上设置
    Grid.IsSharedSizeScope=“True”
    ,该StackPanel用作ItemsControl的ItemsPanel
  • 在ItemTemplate上,更改轴网的HeaderTemplates的StackPanels
  • 在每个网格上,使用相同的
    SharedSizeGroup
    标识符定义一行
  • 项目控件:

    <ItemsControl ItemsSource="{Binding Table.Columns}">
       <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
             <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch"
                         Grid.IsSharedSizeScope="True" />
          </ItemsPanelTemplate>
       </ItemsControl.ItemsPanel>
    
       <ItemsControl.ItemTemplateSelector>
          <local:ColumnTemplateSelector InputParameterColumnTemplate="{StaticResource InputParamterColumn}"
                                        SingleParameterColumnTemplate="{StaticResource SingleParameterColumn}"/>
       </ItemsControl.ItemTemplateSelector>
    </ItemsControl>
    
    
    
    项目模板:

    <DataTemplate x:Key="SingleParameterColumn">       
        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Cells}"      
                  RowHeight="25" RowHeaderWidth="0">
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*"
                                                   SharedSizeGroup="DataGridHeaderRow" />
                                </Grid.RowDefinitions>
                                <TextBlock Text="{Binding Name}"
                                           TextWrapping="Wrap"
                                           TextAlignment="Center"
                                           MaxWidth="60">
                                </TextBlock>
                                <Button Grid.Column="1">
                                    <Image ... />
                                </Button>
                            </Grid>
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>
                    <DataGridTemplateColumn.CellTemplateSelector>....
                    </DataGridTemplateColumn.CellTemplateSelector>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </DataTemplate>
    
    
    ....
    
    你能展示一个屏幕截图吗?下面是屏幕截图:我希望所有标题都具有相同的高度,以便行可以对齐。这很奇怪,我刚刚尝试了你的代码,我的标题单元格自动都是相同的大小。。。您是否编辑了DataGrid模板?或者HeaderTemplate上有什么你没有展示给我们的吗?没有,这就是header模板中的所有内容。你能发布你的代码吗?我只是把你例子中的DataGrid复制到了一个新的解决方案中,复制了DataGridTemplateColumn两次,并直接为每个文本块设置了一个文本,而不是使用绑定。还使用Items来添加两个字符串,而不是绑定ItemsSource。不,这不起作用,因为我的列没有绑定到一个数据网格中,但每个列都是一个单独的数据网格,包含一个模板列。好的,我明白了,这就是为什么我无法重现这个问题。让我再试一次,我会给你回复的。完成。设法复制它并用上面的代码解决它。。。您需要在ItemsControl的ItemsPanel内的StackPanel上设置它,而不是在DataGrid上设置
    IsSharedSizeScope
    。谢谢,工作非常顺利。谢谢你花时间来解决这个问题。祝您有个美好的一天!