1

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

我有可能有这样的代码吗?或者从我目前的解决方法中是否存在更好的代码?

坦克 :)

4

1 回答 1

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

于 2013-01-14T13:12:18.240 回答