如何创建模板XAML样式(代码隐藏)WPF
我的xaml上有这段代码,运行良好(ListView组件)如何创建模板XAML样式(代码隐藏)WPF,wpf,Wpf,我的xaml上有这段代码,运行良好(ListView组件) 我试图用这个答案在代码背后进行复制,但我无法让它工作(Russell的答案)。任何帮助都将不胜感激。谢谢 编辑: ListView ListView=新建ListView(); listView.ItemsPanel=GetItemsPanelTemplate(); 私有项spanelTemplate GetItemsPanelTemplate() { 字符串xaml=@” "; 将XamlReader.Parse(xaml)作为
我试图用这个答案在代码背后进行复制,但我无法让它工作(Russell的答案)。任何帮助都将不胜感激。谢谢
编辑:
ListView ListView=新建ListView();
listView.ItemsPanel=GetItemsPanelTemplate();
私有项spanelTemplate GetItemsPanelTemplate()
{
字符串xaml=@”
";
将XamlReader.Parse(xaml)作为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;
}
给我们看看你写的不起作用的代码,我们会告诉你出了什么问题。我编辑了这个问题,你必须实际阅读错误信息。。。请将上面的xaml与代码xaml字符串进行比较。后者具有
列表视图。ItemsPanel
嵌套在ItemsPanelTemplate
中,这当然不起作用。寻求调试帮助的问题(“此代码为什么不起作用?”)必须包括所需的行为,一个特定的问题或错误,以及在问题本身中重现它所需的最短代码。如果我可以再问你一件事……在这个组件中插入更多属性,如对齐和大小,它会是什么?使用相同的模式XamlReader,我试图理解…您应该只使用XamlReader
来处理不能用C#等价编写的内容。大多数Xaml代码都能清晰地转换为C#,但模板是一种特殊情况。要更改任何其他属性,只需直接在实例上更改它,例如,listView.Width=250
或listView.HorizontalAlignment=HorizontalAlignment.Center
。当然,这很有意义。。。我现在明白了,再次感谢你。
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;
}
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 };
}