1

我已经在 Silverlight 中搜索了 FrameworkElementFactory,我们没有这个类,如果没有,我们还有其他选择,请帮助我。

  FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(Grid));
                spFactory.Name = "myComboFactory";
                spFactory.SetValue(Grid.WidthProperty, Convert.ToDouble(3));
                spFactory.SetValue(Grid.HeightProperty, Convert.ToDouble(3));
                spFactory.SetValue(Grid.RenderTransformProperty, new TranslateTransform(-6, -6));


                FrameworkElementFactory ec1 = new FrameworkElementFactory(typeof(Ellipse));
                ec1.SetValue(Ellipse.FillProperty, Brushes.Red);
                spFactory.AppendChild(ec1);

上面的代码工作正常 WPF 应用程序,但现在我想在 Silverlight5 中做同样的事情我正在使用 VS 2010,Silverlight5 我想动态添加 DataTemplate

4

1 回答 1

3

Silverlight 中不存在 FrameworkElementFactory。如果要在运行时生成 DataTemplate,则必须使用 XamlReader 类。

对于您的情况,您可能会执行以下操作:

ListBox listbox = new ListBox();
DataTemplate template = System.Windows.Markup.XamlReader.Load(
    @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
        <Grid Width=""3"" Height=""3"">
            <Grid.RenderTransform>
                <TranslateTransform X=""6"" Y=""6"" />
            </Grid.RenderTransform>
            <Ellipse Fill=""Red"" />
        </Grid>
    </DataTemplate>") as DataTemplate;

listbox.ItemTemplate = template;

请注意,您必须在根元素中定义默认命名空间 (xmlns=...)。


值得注意的是,您可以/必须使用此方法以编程方式设置 ItemsControl 的 ItemsPanel。

于 2013-03-27T20:13:06.747 回答