我正在使用WPF并拥有像这样的ListViewItem:
<ListViewItem>
<StackPanel Orientation="Horizontal">
<Image Source="docx.png" Height="30"></Image>
<TextBlock Text="image"></TextBlock>
</StackPanel>
</ListViewItem>
这个XAML代码的作用是将带有图像的堆栈面板添加到ListViewItem中。我想知道如何以编程方式实现这一目标。例如,我启动了一个ListViewItem实例并可以访问其内容。但是这个类没有像subitems这样的字段。
答案 0 :(得分:0)
您应该使用ItemsSource
和Binding
轻松访问您在列表中提供的数据。
但是,如果您ListView
调用MyListView
,则可以在第一项中访问控件:
var item = MyListView.Items[0] as ListViewItem;
var firstItemChild = item?.Content as StackPanel;
var image = firstItemChild?.Children[0];
答案 1 :(得分:0)
不要在Xaml中定义项目,ListView允许您定义绑定项目的结构和模板。使用ItemsSource
属性或附加代码隐藏MyView.ItemsSource=MyList
中的项目列表
请记住,该对象必须具有公共Docname
属性(要绑定的所有属性都需要公开)
向MyItems添加项目会将其添加到listView(MyItems需要是ObservableCollection或者您需要手动执行MyView.Items.Refresh()
<ListView x:Name="MyView" ItemsSource ="{Binding MyItems}"
HorizontalAlignment="Stretch" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>//define items container, uniformGrid, stackpanel...
<UniformGrid Columns="5" HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate> //define your item template
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Docname}" Height="30"></Image>
<TextBlock Text="image"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
如果您想为每个项目使用不同的模板,则可以使用 [http://dotnetpattern.com/wpf-listview-itemtemplateselector 或完全在xaml中:
<ListView x:Name="MyView" ItemsSource ="{Binding MyItems}"
HorizontalAlignment="Stretch" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>//define items container, uniformGrid, stackpanel...
<UniformGrid Columns="5" HorizontalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding Value}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type Mytype}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Docname}" Height="30"></Image>
<TextBlock Text="image"></TextBlock>
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type My2type}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Docname}" Height="30"></Image>
<TextBlock Text="2 type image"></TextBlock>
</StackPanel>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>