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でも同じことを実行したいです。VS2010を使用しています。Silverlight5DataTemplateを動的に追加したい

4

1 に答える 1

3

FrameworkElementFactoryはSilverlightには存在しません。実行時にDataTemplatesを生成する場合は、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 に答える