c# wpf datatemplate

¿Cómo construyo un DataTemplate en el código c#?



wpf (2)

Estoy intentando crear una lista desplegable para una interoperabilidad winform, y estoy creando el menú desplegable en el código. Sin embargo, tengo problemas para vincular los datos según el DataTemplate que especifico.

¿Qué me estoy perdiendo?

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;


Bueno, de hecho todavía tenemos otra forma, realmente te gustará si no te gustan las cosas de FrameworkElementFactory .

Y creo que solo hace pequeños cambios en el código natural, es decir, declara un UserControl y pone su control en él, y luego, usa solo FrameworkElementFactory para llamar al UserControl .

Código de demostración simple (en F #):

let buildView()=StackPanel() //Build it with natural code type MyView()=inherit UserControl(Content=buildView()) let factory=FrameworkElementFactory(typeof<MyView>) let template=DataTemplate(VisualTree=factory) let list=ItemsControl(ItemsSource=makeData(),ItemTemplate=template)


Suponiendo que ya ha configurado ItemsSource etc. para drpCreditCardNumberWpf ...

//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;

Puede usar la misma manera que he configurado la ToolTip sobre ToolTip en los TextBlock para establecer otras propiedades, como los márgenes.