2013-07-30 46 views
0

自定義項目的佈局我有一個叫EventBox類,它擴展TableLayoutPanel。這是一張只有一行並動態調整列數的表格。ListView控件在C#

在其生命週期,這EventBox添加/從自身刪除的項目(按鈕,組合框等)。

我要的是創造一個ListView(或類似的東西),將包含多個EventBox對象和視覺在列表中顯示出來。

我已經創建了一個名爲TestEventList類,但我不知道該怎麼延長!

我試過TableLayoutPanel(我相信這是過度殺傷),ListBox(錯!),現在ListView

但是,ListViewItems屬性有一個方法Add它只接受ListViewItem對象作爲參數。

我怎樣才能形容我EventBox作爲ListViewItem

或者更好的是,我還有其他什麼選擇?

編輯:我當然希望該列表能夠保持其項目的跟蹤:添加,索引等

+0

你可以只添加行到'EventBox'嗎?否則,我想我會創建一個包含帶有一列的'TableLayoutPanel'的'UserControl',以及將允許您添加新的'EventBox'es的屬性和方法調用,這些''EventBox's將分別放置在單個新行中列'TableLayoutPanel'。 –

+0

您正在尋找類似於[this](http://stackoverflow.com/q/15532639/643085)的內容,該內置內置於相關的當前非過時.Net Windows UI技術。如果你期望非恐龍類的結果,我強烈建議使用目前的非恐龍材料。對於鏈接中描述的所有原因,winforms是一個不好的選擇。因此,您應該使用任何基於XAML的UI技術。 –

回答

-1

首先,ListView不會做自己的東西去掉。您需要將ListView.View設置爲GridView的實例。我最近不得不解決動態列問題。我選擇的解決方案是可綁定和MVVM兼容的,以防萬一你想使用該模式(我是)。我創建了一個behavior(以避免擴展GridView),它將動態注入和刪除列作爲源結構更新。此行爲需要依賴項屬性,該屬性綁定到定義列的類的實例。列類應該允許您定義列是您要綁定到源數據上的屬性的列,以及一個鍵(代表單元格類型)。

public class ColumnDefinition 
    { 
     public string Key{ get; set} 
     public string ContentBindingPath { get; set;} 
    } 

當列結構發生變化時,行爲會在連接的GridView中建立並注入(或刪除)列。該行爲基於行爲上定義的一系列鍵/值對構建每個列。這是爲了允許XAML指定要應用於新列的單元格模板,從而實現關注點的分離。

public class CellTemplateDefinition 
{ 
    public string Key { get; set; } 
    public DataTemplate ColumnTemplate { get; set;} 
} 

public class DynamicColumnBehavior: Behavior<GridView> 
{ 
    public IEnumerable<ColumnDefinition> Columns 
    { 
     get { return (IEnumerable<ColumnDefinition>)GetValue(ColumnsProperty); } 
     set { SetValue(ColumnsProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for Columns. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty ColumnsProperty = DependencyProperty.Register("Columns", typeof(IEnumerable<ColumnDefinition>), typeof(DynamicColumnBehavior), new UIPropertyMetadata(null)); 

    public static void OnColumnsChanged(DependencyObject sender, DependencyPropertyChangedEventArgsargs) 
    { 
     DynamicColumnBehavior behavior = sender as DynamicColumnBehavior; 
     if(behavior != null) behavior.UpdateColumns(); 
    } 

    public IEnumerable<CellTemplateDefinition> Cells { get; set; } 

    private void UpdateColumns(){ throw new NotImplementedException("I left this bit for you to do ;)");}  
} 
+0

對不起,但我不明白這有何幫助。我唯一的問題是將我的'EventBox's對象排列在垂直列表中,即爲項目(在本例中爲TableLayoutPanel)創建一個帶有自定義佈局的列表視圖。 –

+0

嗯,我完全沒有讀過你使用Winforms。這對你沒用。 未來,如果您想要嵌套控件的動態UI,請考慮WPF(如果可能)。它比winforms領先。 – Gusdor