在WPF中创建VS2012样式ListView / Stack Panel

时间:2013-08-23 12:07:36

标签: c# wpf listview mvvm

我有一个MVVM WPF应用程序,我想在VS2012中创建一个类似风格的开始屏幕(如下所示)

ListVS2012

我想为上面图片中的最新文档创建一个ListView或堆栈面板。我想使用DataTemplate执行此操作,以便我可以在应用程序的其他区域中使用该控件。

在WinForms中,我会设计一个用户控件,但在WPF中,我很担心最好的方法。我考虑过使用包含数据模板的资源文件和固定/未固定图像的转换器

<DataTemplate x:Key="imageWithTextBlockTemplate">
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
        <Image Source="{Binding Converter={StaticResource booleanToImageConverter}}" 
                                Stretch="UniformToFill" Width="16"/> 
        <TextBlock Text="{Binding}"/>
    </StackPanel>
</DataTemplate>

这没有完成(显然),但这是正确的方法,还是有更好/更标准的方法来做这些事情?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

如果您正在尝试创建类似于VS2012的控件,那么在VS2012中找出“如何”的最佳位置。记住VS2012是用WPF制作的。

因此,如果您获得Snoop并分析“起始页”,您应该看到类似的内容:

enter image description here

正如您所看到的那样,确实正在使用ListBox

然后,他们将DataTemplate作为Grid,使用自定义CheckBox来保持“固定”状态,然后在右边是另一个Grid来保存项目图标({{ 1}})和名称(Image)。

<强>更新

至于TextBlock,他们使用CheckBox。现在你可以启动反射器来获得确切的定义,或者根据Snoop的数据说,看起来这个控件在其中包含Microsoft.VisualStudio.PlatformUI.ImageCheckBoxBorder

它使用的

Image来源如下:

Image

现在关于使用此信息的实施,

  • 我在您的虚拟机中拥有该集合的每个项目,并保持pack://application:,,,/Microsoft.VisualStudio.Shell.11.0;component/UI/Images/pinned normal.png pack://application:,,,/Microsoft.VisualStudio.Shell.11.0;component/UI/Images/unpinned normal.png Text状态。
  • 接下来,创建自定义IsPinned样式并修改它CheckBox以保存带图像的图像或边框。
  • 使用ControlTemplate检查ControlTemplate.Triggers属性并相应地修改IsChecked以在各种“固定”图片之间切换
  • 有了这个,您可以Image.Source DataTemplate ListBox.ItemTemplateStackPanelOrientation="Horizontal")一起生成2个孩子。首先使用上面创建的自定义Style和第二个TextBlock
  • 复选框
  • 最后将CheckBox.IsChecked中的DataTemplate{Binding IsPinned}TextBlock.Text {Binding Text}
  • 绑定在一起

应该是它。您还必须调整ListBox.ItemContainerStyle来摆脱列表框中的默认鼠标悬停效果,并且可能还设置HorizontalContentAlignment="Stretch"但它们实际上并不属于您的DataTemplate