【问题标题】:WPF GridViewColumn align doesnt workWPF GridViewColumn 对齐不起作用
【发布时间】:2015-05-08 12:28:18
【问题描述】:

我希望GridViewColumn“发件人”中的信息向右对齐。

这是我所做的,但它不起作用:

    <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 来拉伸。
  • @Blam &lt;TextBlock TextAlignment="Right" Width="40" HorizontalAlignment="Stretch"/&gt; ?
  • 你告诉我。有用吗?
  • 试试 Horizo​​ntalContentAlignment
  • @Blam Horizo​​ntalContentAlignment 与哪个元素? GridViewColumn 或 TextBlock 上没有 Horizo​​ntalContentAlignment..

标签: c# wpf


【解决方案1】:

如果您只希望一个特定的列向右对齐,请尝试以下示例

https://msdn.microsoft.com/en-us/library/bb961985.aspx

这是我的实现

<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}",需要在文本块中设置 否则会忽略你的单元格模板

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

【讨论】:

    【解决方案2】:

    这里的问题是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。不过我很欣赏你的尝试
    猜你喜欢
    • 2011-07-28
    • 2014-10-10
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2015-02-01
    • 2010-10-08
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多