我用C#代码创建一个ListBox(在转换器中我决定必须显示哪个控件)。不幸的是,我无法在C#代码中将ItemsPanel设置为WrapPanel。目前我有这样的代码(作为解决方法):
在xaml文件(ResourceDictionary)中:
<ItemsPanelTemplate x:Key="HorizontalWrapPanelItemsPanelTemplate" >
<toolkit:WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
在C#文件(转换器)中:
listBox.ItemsPanel = Application.Current.Resources["HorizontalWrapPanelItemsPanelTemplate"] as ItemsPanelTemplate;
它工作正常,但我会有这样的代码:
listBoxEdit.ItemsPanel = new WrapPanel(); //Not Work
或者
WrapPanel wrapPanel = new WrapPanel();
listBoxEdit.ItemsPanel = new ItemsPanelTemplate(wrapPanel); //Not Work
我可能有这样的代码吗?或者从目前我的解决方法中存在更好的代码?
tanx:)
答案 0 :(得分:4)
在WPF中,您将使用FrameworkElementFactory:
FrameworkElementFactory factoryPanel = new FrameworkElementFactory(typeof(WrapPanel));
factoryPanel.SetValue(WrapPanel.OrientationProperty, Orientation.Horizontal);
ItemsPanelTemplate template = new ItemsPanelTemplate();
template.VisualTree = factoryPanel;
menu.ItemsPanel = template;
在Silverlight中这不起作用,您必须使用XAMLReader:
listBoxEdit.ItemsPanel = (ItemsPanelTemplate)XamlReader.Load(@"<ItemsPanelTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' >
<toolkit:WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>");