【问题标题】:HorizontalAlignment not working on ComboBox in DataGridTextColumnHorizo​​ntalAlignment 在 DataGridTextColumn 中的 ComboBox 上不起作用
【发布时间】:2015-01-15 00:08:27
【问题描述】:

我有一个DataGridTextColumn,其标头由TextBlockComboBox 组成。我希望TextBlock 左对齐,ComboBox 右对齐。当我尝试使用HorizontalAlignment = "Right"ComboBox 上设置它时,它不起作用!对于标题,我尝试使用StackPanel 以及Grid 来包含TextBlockComboBox。我做错了什么?

    <DataGrid 
        CanUserSortColumns="True"
        IsReadOnly="True">

        <DataGrid.Columns>
            <DataGridTextColumn Header="Time"/>

            <DataGridTextColumn>

                <DataGridTextColumn.Header>

                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="Money" VerticalAlignment="Center"/>
                        <ComboBox HorizontalAlignment="Right" VerticalAlignment="Center"
                            Width="100" ItemsSource="{Binding comboBoxItems}" SelectedIndex="0">
                        </ComboBox>
                    </StackPanel>
                </DataGridTextColumn.Header>

            </DataGridTextColumn>

        </DataGrid.Columns>
    </DataGrid>

尝试使用网格:

                <DataGridTextColumn.Header>

                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Column="0" Text="Money" VerticalAlignment="Center"/>
                        <ComboBox Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center"
                            ItemsSource="{Binding comboBoxItems}" SelectedIndex="0">
                        </ComboBox>
                    </Grid>

                </DataGridTextColumn.Header>

编辑 1:如果拖动列以增加列宽,我希望 ComboBox 被拉伸。否则,如果将列拖到右侧,则至少 ComboBox 应该向右对齐。

编辑 2:这里重要的是,当我拖动列以增加其宽度时,ComboBox 应该落在右侧。

【问题讨论】:

  • 您可以使用Grid 发布您的尝试吗?谢谢
  • 刚刚添加了网格尝试...
  • 这就是你需要的link
  • 将 safi 示例中的宽度添加到您的网格中,它将起作用。

标签: c# wpf datagrid


【解决方案1】:

使用这个

<DataGridTextColumn Width="120">
    <DataGridTextColumn.HeaderTemplate>
        <DataTemplate>
            <Grid Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type DataGridColumnHeader}}}">
                <TextBlock Text="LLLLL" HorizontalAlignment="Left" Margin="5"/>
                <TextBlock Text="RRRRR" HorizontalAlignment="Right" Margin="5"/>
            </Grid>
        </DataTemplate>
    </DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>

【讨论】:

    【解决方案2】:

    尝试DockPanel 而不是StackPanel

    <DockPanel LastChildFill="True">
            <TextBlock Text="Money" VerticalAlignment="Center" DockPanel.Dock="Left"/>
            <ComboBox  VerticalAlignment="Center" SelectedIndex="0"/>
    </DockPanel>
    

    【讨论】:

    • 究竟是什么不起作用?您是否复制了整个示例?
    • 您之前没有提供示例代码。无论如何,我做了你后来添加的同样的事情,但它不起作用。 ComboBox 保持在左侧!
    • 对我来说很好用。你确定你删除了组合框的宽度并设置了 LastChildFill="True"?
    • 是的,我确实添加了所有这些!
    猜你喜欢
    • 1970-01-01
    • 2013-06-04
    • 2010-10-19
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多