如何编程创建ComboBox的ItemTemplate?

3
我希望能够通过编程方式为ComboBox创建一个ItemTemplate(就像主题所说的那样)。
目前我在XAML中有一个ItemTemplate:
<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的情况下获得结果。

这是否有可能实现?


2
如果你讨厌XAML,那为什么要使用WPF呢? - H H
1
可以的,所有的XAML标签都是CLR类。只需要从t = new DataTemplate();开始即可,不过需要做更多的工作。 - H H
你为什么如此不喜欢XAML? XAML拥有所有语言的功能。 - abhishek
我的一些窗口是使用XAML设计的,但我尝试设计更小的对话框而不使用XAML。感谢Henk的回答,我会进一步了解DataTemplate()。 - TorbenJ
@abhishek 我不喜欢它,因为我认为它太难了。我不想花费大约两年的时间学习XAML,以便在设计我的控件时没有任何更大的问题。对于我的当前项目,我决定尽可能少地使用它。 - TorbenJ
@Skadier 我持相反的观点。如果你学习一次 WPF 构造,编码会更容易,而不是通过 C# 编写。在编码中需要考虑很多 API,而 XAML 则更简单易写。 顺便说一下,我已经为你转换了代码。 - abhishek
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。

1

谢谢你的回答,但我选择了Abhishek的答案,因为他提供了代码示例。 - TorbenJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接