【问题标题】:WPF Listview, align listview item horizontal dynamic not in xamlWPF Listview,对齐listview项目水平动态不在xaml中
【发布时间】:2013-10-18 13:07:05
【问题描述】:

如何动态对齐列表视图中的列表视图项。

-- 不在 XAML 中--

lv.View = GridView

GridView.Columns.Add(New GridViewColumn With {.Header = "CrewId", .DisplayMemberBinding = New Binding("CrewId")})
GridView.Columns.Add(New GridViewColumn With {.Header = "FirstName", .DisplayMemberBinding = New Binding("FirstName")})
GridView.Columns.Add(New GridViewColumn With {.Header = "LastName", .DisplayMemberBinding = New Binding("LastName")})
GridView.Columns.Add(New GridViewColumn With {.Header = "Country", .DisplayMemberBinding = New Binding("Country")})
GridView.Columns.Add(New GridViewColumn With {.Header = "Rank", .DisplayMemberBinding = New Binding("Rank")})

Try
    lv.ItemsSource = dsCrew.Tables(0).DefaultView
Catch ex As Exception
    MsgBox(ex.Message)
End Try

【问题讨论】:

  • 欢迎来到stackoverflow!您能更具体地说明您要做什么吗?
  • 列表视图第1列的文本必须放在右边。
  • 不要在 WPF 的过程代码中操作 UI 元素。这就是 XAML 的用途。

标签: wpf vb.net


【解决方案1】:

您可以简单地使用HorizontalContentAlignment 属性来对齐所有ListViewItems:

lv.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Right;

更新>>>

啊,这就是这个解决方案不起作用的原因......您有不止一列。当然,在你展示你的代码之前,我不能说出来。好的,我找到了一种将所有列向右对齐的方法...我知道这不完全是您所追求的,但我会在此处添加此内容,直到找到更好的解决方案:

Style style = new Style(typeof(ListViewItem));
style.Setters.Add(new Setter(ListViewItem.HorizontalContentAlignmentProperty, 
    HorizontalAlignment.Right));
YourListView.ItemContainerStyle = style;

在此期间,您也许可以解决剩下的问题。


更新 2 >>>

好的,所以我在网上进行了很好的搜索,这是我为您找到答案的最接近的答案...在 Tracy Sells 的网站上有一篇名为 How to center and right align text inside a GridViewColumn in a WPF ListView Control 的文章展示了如何做这在 XAML 中...是的,我知道您希望在代码中使用它,但是您必须在这里做一些工作:

<ListView 
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridViewColumn>
                <TextBlock Text="MyText" TextAlignment="Center" />   
            </GridViewColumn>
        </GridView>
    <ListView.View>
</ListView>

我们可以修改我的第二段代码来实现ItemContainerStyle

Style style = new Style(typeof(ListViewItem));
style.Setters.Add(new Setter(ListViewItem.HorizontalContentAlignmentProperty, 
    HorizontalAlignment.Stretch));
YourListView.ItemContainerStyle = style;

不幸的是,我只能做到这一点,因为我从未真正使用过ListView。所以现在,您只需要了解如何在相关GridViewColumn 的内容上设置TextAlignment。我注意到在代码中做这种事情并没有太多帮助,这仅仅是因为这不是通常的做法。不管怎样,祝你好运,找到如何完成谜题的最后一部分。

【讨论】:

  • 我已经尝试过了,但这不起作用,我只想要右边的第 1 列。
  • 我不知道该如何回应,因为我刚刚尝试过它确实有效。也许如果您真的展示了所有相关代码,那么我们可以提供进一步的帮助?
  • 'code'GridView.Columns.Add(New GridViewColumn With {.Header = "CrewId", .DisplayMemberBinding = New Binding("CrewId")}) GridView.Columns.Add(New GridViewColumn With { .Header = "FirstName", .DisplayMemberBinding = New Binding("FirstName")}) GridView.Columns.Add(New GridViewColumn With {.Header = "LastName", .DisplayMemberBinding = New Binding("LastName")}) GridView。 Columns.Add(New GridViewColumn With {.Header = "Country", .DisplayMemberBinding = New Binding("Country")}) Try lv.ItemsSource = dsCrew.Tables(0).DefaultView catch ex As Exception MsgBox(ex.Message)结束尝试
  • @LudiKuyper,您能否将代码添加到您的问题中以便于查看然后删除您的评论?
  • 确实如此,谢谢。您现在也可以删除带有代码的评论吗?我用中间解决方案更新了我的答案。
猜你喜欢
  • 2015-02-11
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 2018-05-28
  • 2010-11-05
  • 1970-01-01
  • 2018-06-06
相关资源
最近更新 更多