【问题标题】:WPF ListView - is it better in Visual Studio 2010?WPF ListView - 在 Visual Studio 2010 中更好吗?
【发布时间】:2010-12-13 15:35:11
【问题描述】:

我尝试使用 WPF ListView 实现一个只读的项目网格。

在我看来,这是一个设计和实施不佳的控件。 (与我喜欢的大多数 WPF 不同)。

我遇到的具体问题:

  • 无法将最后一列扩展为 填充控件的宽度, 无需编写额外的非 XAML 代码。 (见 this question

  • 必须覆盖一些任意硬编码的值才能获得单元格模板以实际填充单元格区域。 (见 this blog entry

对我来说,这些都是非常明显的缺陷,意味着这个控件被匆忙地引入了 Visual Studio 2008。

有谁知道这些是否已在 Visual Studio 2010 中修复?

【问题讨论】:

    标签: wpf listview


    【解决方案1】:

    VS 2010 不是框架,据我所知.net 3.5 sp1 是 WPF 的最新版本。我不确定您的问题是否有其他解决方案,虽然很可能是的,但在 VS 2010 中的行为肯定是相同的。

    您是否考虑过为 ListView 的行和列管理器提供自己的模板?

    编辑:如果您询问即将推出的 .net 4,GridViewColumn Width 属性仍然是 Double,因此它不支持星号大小。所以很可能行为仍然相同。

    XCeed 的数据网格支持星形大小,虽然根据我的经验,它也有点时髦,而且它们有一个特殊的拉伸模式可以打开,但老实说,你链接的文章中描述的附加行为方法相当干净并且做得很好.您几乎可以将其大量投入到您的项目中,然后直接使用它。

    http://www.ontheblog.net/CMS/Home/tabid/36/EntryID/37/Default.aspx

    它没有覆盖任何“任意硬编码的值”,而是添加了一个新的附加行为,在这种情况下,当附加属性“Stretch”设置为 true 时,会平等地拉伸所有列。您必须根据您的情况稍微调整它,以便仅拉伸最后一列。

    附加的行为方法是一个很好的方法,完全可重用,自包含,并保持你的 xaml 干净,后面的代码没有任何混乱。

    【讨论】:

      【解决方案2】:

      您检查过 WPF 工具包吗?

      它有一个DataGrid 控件,它比ListView/GridView 提供更多开箱即用的功能。

      http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117

      但是,关于您的特殊问题,我不确定是否有一种自动方法可以使最后一列填充容器的剩余宽度(默认为“空白”列填充剩余空间)[更正:见下面的编辑]。不过,我知道您有一个 Visiblity 列属性,这是 IMO 的巨大改进。

      我确实有一些DataGrid 的示例,它们具有特殊颜色的单元格,并且颜色一直延伸到单元格的边缘,所以我认为您的第二个问题应该是可行的。

      作为一个例子,这是我的单元格着色器样式:

      <Style
          x:Key="Main_DataGridCellStyle"
          TargetType="mwc:DataGridCell">
          <Setter
              Property="BorderThickness"
              Value="0" />
          <Setter
              Property="Background"
              Value="{Binding XPath=@Background}" />
          <Setter
              Property="Foreground"
              Value="Black" />
      </Style>
      

      此外,DataGrid 会自动排序,尽管我确实必须进行一些非常繁重的模板编辑才能使箭头正确显示:( 希望这将在 VS10 推出时得到修复--我很确定社区已经意识到了这一点。

      编辑

      我的立场是正确的(以一种好的方式)。我刚刚在测试DataGrid 的最后一列中尝试了Width="*",它就像一个魅力。

      此外,此链接确认 DataGrid 将成为 WPF 4.0 的一部分,而 WPF 4.0 是 VS 2010 的一部分:

      http://weblogs.asp.net/scottgu/archive/2009/10/26/wpf-4-vs-2010-and-net-4-0-series.aspx

      【讨论】:

      • 我不相信 WPFToolkit 数据网格提供了开箱即用的列星型大小或最后一列拉伸。对于只读的数据列表,您并不需要合适的数据网格,模板化的列表视图更精简并且做同样的事情。
      • @Egor,谢谢,在您发表评论时,我对我的答案做了一些更新:)
      • 糟糕,我的立场已得到纠正,很高兴知道。是的,现在我看了一下,列宽属性的类型是 DataGridLength,而不是 double。
      猜你喜欢
      • 2011-12-04
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多