c# - 如何在 C# 代码中构建 DataTemplate?

标签 c# wpf datatemplate

我正在尝试为 winform 互操作构建下拉列表,并且我正在代码中创建下拉列表。但是,我在根据指定的 DataTemplate 获取数据时遇到问题。

我错过了什么?

drpCreditCardNumberWpf = new ComboBox();  
DataTemplate cardLayout = new DataTemplate {DataType = typeof (CreditCardPayment)};   
StackPanel sp = new StackPanel
{
    Orientation = System.Windows.Controls.Orientation.Vertical
};   

TextBlock cardHolder = new TextBlock {ToolTip = "Card Holder Name"};
cardHolder.SetBinding(TextBlock.TextProperty, "BillToName");
sp.Children.Add(cardHolder);

TextBlock cardNumber = new TextBlock {ToolTip = "Credit Card Number"};
cardNumber.SetBinding(TextBlock.TextProperty, "SafeNumber");
sp.Children.Add(cardNumber);

TextBlock notes = new TextBlock {ToolTip = "Notes"};
notes.SetBinding(TextBlock.TextProperty, "Notes");
sp.Children.Add(notes);

cardLayout.Resources.Add(sp, null);

drpCreditCardNumberWpf.ItemTemplate = cardLayout;

最佳答案

假设您已经为 drpCreditCardNumberWpf 设置了 ItemsSource 等......

//create the data template
DataTemplate cardLayout = new DataTemplate();
cardLayout.DataType = typeof(CreditCardPayment);

//set up the stack panel
FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(StackPanel));
spFactory.Name = "myComboFactory";
spFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);

//set up the card holder textblock
FrameworkElementFactory cardHolder = new FrameworkElementFactory(typeof(TextBlock));
cardHolder.SetBinding(TextBlock.TextProperty, new Binding("BillToName"));
cardHolder.SetValue(TextBlock.ToolTipProperty, "Card Holder Name");
spFactory.AppendChild(cardHolder);

//set up the card number textblock
FrameworkElementFactory cardNumber = new FrameworkElementFactory(typeof(TextBlock));
cardNumber.SetBinding(TextBlock.TextProperty, new Binding("SafeNumber"));
cardNumber.SetValue(TextBlock.ToolTipProperty, "Credit Card Number");
spFactory.AppendChild(cardNumber);

//set up the notes textblock
FrameworkElementFactory notes = new FrameworkElementFactory(typeof(TextBlock));
notes.SetBinding(TextBlock.TextProperty, new Binding("Notes"));
notes.SetValue(TextBlock.ToolTipProperty, "Notes");
spFactory.AppendChild(notes);

//set the visual tree of the data template
cardLayout.VisualTree = spFactory;

//set the item template to be our shiny new data template
drpCreditCardNumberWpf.ItemTemplate = cardLayout;

您可以使用我在 TextBlock 上设置 ToolTip 的方法来设置其他属性,例如边距。

关于c# - 如何在 C# 代码中构建 DataTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/248362/

相关文章:

c# - 如何使用图像作为鼠标指针而不是使用 C# 的默认箭头?

wpf - 如何防止WPF触发器在退出时重置原始值

wpf - 如何为单一类型指定两个数据模板?

wpf - 为什么我不能在样式内设置数据模板,但可以在控件模板内设置?

c# - SqlDbType.DateTime 不存储秒数吗?

c# - 领域驱动设计应用服务

c# - 当用户在文本框中输入字符时通知 ViewModel

c# - 在 Windows 8 中将视觉状态添加到数据模板

c# - 如何在c#中使用kubernetes-client创建k8s部署?

c# - 单击 WPF 按钮时的方法运行不正常