wpf的listview编辑指定列_关于WPF:WPF-如何使某些ListView项跨列?

我有一组要通过WPF ListView以这种方式呈现的数据:

Column1   Column2   Column3

--GroupName1--

Item1     part2     part3

Item2     part2     part3

--GroupName2--

Item3     part2     part3

Item4     long_text_in_both_columns

Item5     part2     part3

--GroupName1--

Item6     part2     part3

Item7     long_text_in_both_columns

--GroupName3--

Item8     part2     part3

我首先使用以下基本示例:http://msdn.microsoft.com/zh-cn/library/ms771309(VS.90).aspx

上面的Item4和Item7带有长文本,我想跨越其余的列(忽略原始列标题的含义)。 我怎样才能做到这一点?

我已经有一些带有DataTrigger的XAML设置,可以用自定义的TextBlock替换默认的GridViewRowPresenter,但这并不是我想要的。 我需要第1列中的数据能够正常显示,并识别第一列的宽度。

这是我最终通过适当的ListView解决此问题的方法:

关键是DataTriggered模板不使用GridViewRowPresenter,而是使用其自己的网格来伪造它的使用。为了与GridViewRowPresenter内部使用的内容相匹配,必须猜测一些填充/边距。另一个棘手的部分是将内部Grid列绑定到ListView列的整体宽度。调整列大小然后可以按预期工作。

当然,这将删除所有的悬停和选择效果,因为它将替换默认模板。 只需删除底部的设置模板即可。

@ user317033,它允许默认项的选择突出显示,但跨列的行仍不存在。

仅当第0列具有明确的宽度时,才尝试将长项与第1列对齐。 如果用户双击第一个分隔线以自动调整列的大小,则宽度将被视为零,并且文本将变得未对齐。 在示例中,可以通过将Columns[0].Width更改为Columns[0].ActualWidth来纠正此问题。

我有一个类似的问题,我希望某些行具有一个跨列的项目,该项目从第9列的第5列开始。我对@PeteVasi的答案实施了一种变体,其中有两个主要变化:

您想绑定到ActualWidth而不是Width,否则在例如列是自动调整大小的。

您可以使用RelativeSource避免通过名称指定myListView(这使其更适合在样式资源中使用)。

为此,请在此更改ColumnDefinition条目中的Width分配:

Width="{Binding ElementName=myListView, Path=View.Columns[0].Width}"

对此:

Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,

AncestorType={x:Type ListView}}, Path=View.Columns[0].ActualWidth}"

此外,您不需要使用嵌套的,并且如果要保持鼠标悬停和选择突出显示效果,则需要克隆默认样式。

我对使用GridViewRowPresenter的答案进行了微小的变化实验,并玩了一个坏主意(监视列调整大小事件,并使用它们来设置绑定列宽的属性)。可以在github上的DisasmUiTest项目中找到各种实验,包括完全样式化的版本。

我认为,为此,您使用ListBox而不是ListView并使用其ItemTemplate拆分每列。

这样,您将有机会将Trigger放入其中或基于某些数据,使一个控件不可见并显示长文本。

:)

我还可以获得使用ListView的其他好处,例如全部对齐且可调整大小的列吗?

不,你不。 但是您需要自己实现相同的功能。 可能是您可以将每个TextBlock的大小与标头的大小绑定在一起,以便在调整标头的大小时,每个TextBox的大小都会改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值