如何创建模板XAML样式(后面的代码)WPF



我在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 };
}

最新更新