編輯:代碼中的解決方案可以在底部找到。WPF - 自動格式化自定義類型如何? (ControlTemplate,Style ..)
我不確定我是否「思考錯誤」。假設我有一個ListBox
,我想添加不同的東西到這個ListBox
。當然,我知道我可以更改ItemTemplate
,添加一些數據綁定到它,以顯示我的自定義類。
但這是「特殊」的。我正在尋找一種方法來爲我的DataWrapper
創建「默認」外觀,而不依賴於它的使用位置。
如果我試圖爲它創建一個風格,他在抱怨說這個類不會從FrameworkElement
下降。好吧,簡單的方法,讓DataWrapper
子FrameworkElement
。但是這「感覺不對」,因爲這是一個業務對象,而不是UI元素。
我有點卡住了,我知道必須有辦法告訴WPF如何呈現它不知道的元素。目前它顯示完整的課程名稱。
那麼最簡單的方法是什麼? DataWrapper
爲TextBlock
綠色背景,DataWrapper2
爲TextBlock
藍色背景。顯示數據字符串。 我知道綁定和所有這些東西,我只是堅持如何告訴WPF:
如果你的一個孩子是DataWrapper
,請用這種方法渲染它。如果是DataWrapper2
,請渲染這樣...
這裏是一些試用代碼:
public class DataWrapper
{
public string Data { get; set; }
}
public class DataWrapper2
{
public string Data { get; set; }
}
public static class ListBoxTest
{
public static ListBox CreateTestInstance()
{
var lB = new ListBox();
var items = new ObservableCollection<object>
{
23.5,
"Hello World",
new Button() {Content = "Click me"},
new DataWrapper() {Data = "Some text"},
new DataWrapper2() {Data = "Other text"},
"string again"
};
lB.ItemsSource = items;
var dT = CreateDataTemplate();
lB.Resources.Add(dT.DataTemplateKey, dT);
return lB;
}
public static DataTemplate CreateDataTemplate()
{
var dT = new DataTemplate(typeof(DataWrapper));
var elementFactory = new FrameworkElementFactory(typeof(TextBlock));
elementFactory.SetBinding(TextBlock.TextProperty, new Binding("Data"));
dT.VisualTree = elementFactory;
return dT;
}
}
謝謝,我知道這並不難。剛剛在我所有的試用中迷失了一點...更新後的代碼,如果有人想知道如何.. – 2009-11-12 22:07:28