我目前有这样的WPF GUI设置:
"检查第三方更新"按钮将查询机器是否有过时的应用程序安装并显示结果,每个更新分组在自己的行/部分中,其中包含一些描述更新的文本和一个允许它们启动安装的按钮。
我有一个为第三方更新构建的类,包含应用程序名称,版本,安装路径,要显示的消息等。我的问题主要是如何实现可视组件。每次更新"应用程序列表"迭代遍历并找到成员,需要使用公共元素(按钮,文本,图片等)生成新行。而且我不知道可能会生成多少行,因此我需要考虑在选项卡中向下滚动的可能性。列表框控制的方式是什么?如何为动态创建的行设置可视模板?
答案 0 :(得分:2)
ListBox将是一种明智的方法。您必须为ListBoxItems创建一个DataTemplate,并将其分配给ListBox的ItemTemplate
属性,如Styling and Templating an ItemsControl中所述。其余所有内容,如选择项目或滚动列表的能力,当然都是由ListBox控件自动完成的。
可能看起来像这样:
<ListBox ItemsSource="{Binding ThirdPartyUpdates}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding AppIcon}" Margin="5"/>
<TextBlock Text="{Binding AppName}" Margin="5"/>
<TextBlock Text="{Binding AppVersion}" Margin="5"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
上面的ListBox的视图模型将是这样的:
public class ThirdPartyUpdate
{
public string AppIcon { get; set; }
public string AppName { get; set; }
public string AppVersion { get; set; }
}
public class ViewModel
{
public ObservableCollection<ThirdPartyUpdate> ThirdPartyUpdates { get; set; }
}
答案 1 :(得分:0)
您可以使用ItemsControl并将其绑定到Class的集合,并使用ItemsControl的模板将数据绑定到您想要的任何控件。看看这个Example
对于集合中的每个项目,您将创建一行。使用ScrollViewer围绕项目控件。将VerticalScrollbar可见性设置为auto,以便仅在需要时才可见。如果您将最大高度设置为您感觉正确的值并将高度设置为自动。它将增长到最大高度,如果超出该项,则会显示滚动条。