3

我想以编程方式创建一个ItemTemplateComboBox如主题所述)。

目前我ItemTemplate在 XAML 中有一个:

<Style x:Key="ComboBox_EntityCreation_GroupSelect_Style" TargetType="{x:Type ComboBox}">
    <Setter Property="ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock>
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0}    {1} Mitglied(er)">
                                <Binding Path="Name"/>
                                <Binding Path="MemberCount"/>
                            </MultiBinding>
                        </TextBlock.Text>
                </TextBlock>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

由于我对 XAML 的仇恨,我想在没有 XAML 的情况下得到结果。

是否有可能做到这一点?

4

2 回答 2

3

我刚刚转换了这个。请检查它是否有效。

Style style = new Style(typeof(ComboBox));
var d = new DataTemplate();

MultiBinding mb = new MultiBinding();
mb.StringFormat = "{0} {1} Mitglied(er)";
mb.Bindings.Add(new Binding("Name"));
mb.Bindings.Add(new Binding("MemberCount"));

FrameworkElementFactory textElement = new FrameworkElementFactory(typeof(TextBlock));
textElement.SetBinding(TextBlock.TextProperty, mb);
d.VisualTree = textElement;

style.Setters.Add(new Setter(ComboBox.ItemTemplateProperty, d));
this.Resources.Add("ComboBox_EntityCreation_GroupSelect_Style", style);

您可以使用 FrameworkElementFactory 将 DataTemplate 分配给其 VisualTree。

于 2012-09-30T16:09:46.493 回答
1

通过代码生成模板是通过工厂(即 FrameworkElementFactory)完成的。您可以通过 FrameworkElement 类型生成工厂并通过工厂上的方法设置绑定等。

msdn上给出了类似的问题和一个简单的例子:http: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/f230804d-fc0f-4321-a61e-69a2c890b28d/

于 2012-09-30T16:01:46.760 回答