我在XAML上有此代码,并且工作正常(listView component(
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
我正在尝试使用此答案在后面的代码中复制代码,但我无法使其正常工作(Russell的答案(。任何帮助将不胜感激。谢谢!
编辑:
ListView listView = new ListView();
listView.ItemsPanel = GetItemsPanelTemplate();
private ItemsPanelTemplate GetItemsPanelTemplate()
{
string xaml = @"<ItemsPanelTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation=""Horizontal""></StackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ItemsPanelTemplate>";
return XamlReader.Parse(xaml) as ItemsPanelTemplate;
}
如果您删除了ListView.ItemsPanel
元素和内部ItemsPanelTemplate
元素:
private ItemsPanelTemplate GetItemsPanelTemplate()
{
return XamlReader.Parse(
@"<ItemsPanelTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>
<StackPanel Orientation='Horizontal' IsItemsHost='True' />
</ItemsPanelTemplate>") as ItemsPanelTemplate;
}
但是,根据您链接的答案的首选方法是:
private ItemsPanelTemplate GetItemsPanelTemplate()
{
var factory = new FrameworkElementFactory(typeof(StackPanel));
factory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
factory.SetValue(Panel.IsItemsHostProperty, true);
return new ItemsPanelTemplate { VisualTree = factory };
}