如何在不在xaml中的代码中设置ListBox.ItemsPanel?

时间:2013-01-14 13:03:36

标签: silverlight

我用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:)

1 个答案:

答案 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>");

来自:http://blogs.msdn.com/b/scmorris/archive/2008/04/14/defining-silverlight-datagrid-columns-at-runtime.aspx