WPF中GridViewColumn的对齐方式不起作用

6

我希望将 GridViewColumn 中的 "from" 内容右对齐。

以下是我的尝试,但没有生效:

    <ListView ItemsSource="{Binding VolumeNumber}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" >
       <ListView.View>
          <GridView AllowsColumnReorder="False">
             <GridViewColumn Header="SomeStatus" DisplayMemberBinding="{Binding Name}" Width="170" />
             <GridViewColumn Header="from" DisplayMemberBinding="{Binding Value, StringFormat=0.000000}" Width="170 >
                <GridViewColumn.CellTemplate>
                   <DataTemplate>
                      <TextBlock TextAlignment="Right" Width="40"/>
                   </DataTemplate>
                </GridViewColumn.CellTemplate>
             </GridViewColumn>
          </GridView>
       </ListView.View>
    </ListView>

我忘记了具体细节,但你需要让TextBlock拉伸。 - paparazzo
@Blam <TextBlock TextAlignment="Right" Width="40" HorizontalAlignment="Stretch"/> - MikroDel
你告诉我,它能工作吗? - paparazzo
尝试使用HorizontalContentAlignment。 - paparazzo
@Blam 使用哪个元素的HorizontalContentAlignment?GridViewColumn或TextBlock上没有HorizontalContentAlignment。 - MikroDel
@MikroDel 尝试在 ItemContainerStyle 中将 ListViewItemHorizontalContentAlignment 设置为 Stretch,然后您应该能够将列中的文本右对齐。 - dkozl
2个回答

12
如果你只想让一个特定的列右对齐,请参考此示例。这是我的实现。
<Window.Resources>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</Window.Resources>
<Grid>
    <ListView ItemsSource="{Binding VolumeNumber}">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="SomeStatus" DisplayMemberBinding="{Binding Name}" Width="170"/>
                <GridViewColumn Header="from" Width="170">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Value}" TextAlignment="Right" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
</Grid>
</Window>

现在不要在GridViewColumn声明中设置DisplayMemberBinding = "{Binding Value}",需要在textblock中设置它否则它将忽略你的单元格模板

要更改列的对齐方式,需要指定每个ListViewItem的HorizontalContentAlignment属性为Stretch,以便每个ListViewItem中的元素可以跨越或沿着每列的整个宽度定位。因为ListView绑定到数据源,所以需要创建一个样式来设置HorizontalContentAlignment。接下来,需要使用DataTemplate来显示内容,而不是使用DisplayMemberBinding属性。为了显示每个模板的值,DataTemplate可以只包含一个HorizontalAlignment属性设置为Right的TextBlock。 以下示例定义了必要的样式和DataTemplate,使列右对齐,并更改GridViewColumn引用DataTemplate。

enter image description here


6
这里的问题在于ListViewItem(即每个GridViewColumn单元格的容器)。你需要将其属性HorizontalContentAlignment设置为Stretch
看这里(如果要使用DataTemplate,则还需要删除DisplayMemberBinding):
<ListView ItemsSource="{Binding VolumeNumber}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" >
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView AllowsColumnReorder="False">
            <GridViewColumn Header="SomeStatus" DisplayMemberBinding="{Binding Name}" Width="170" />
            <GridViewColumn Header="from" Width="170">
            <GridViewColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Value, StringFormat=0.000000}" TextAlignment="Right" />
                </DataTemplate>
            </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

我想让你的答案也能被接受 :) 这样可以给你更多积分。 - MikroDel
但我会查看您的帖子,如果我认为它对我有好处,我会点赞 :) - MikroDel
不管怎样,@MikroDel。但是我很感激你的尝试。 - Il Vic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接