2013-08-27 136 views
8

我有以下代碼以行和列的形式填充我的用戶控件。正在填充的用戶控件包含按鈕,鏈接,文本框等。當在特定的行/列中的特定用戶控件上按某個按鈕時,我需要知道該按鈕被按下的用戶控件。這裏是填充行中的用戶控件和列在ItemsControl中獲取所選項目

<ItemsControl ItemsSource="{Binding Templates}" Width="{Binding GridWidth}"> 
     <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <UniformGrid Columns="{Binding NumColumns}" /> 
       </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemContainerStyle> 
       <Style> 
        <Setter Property="Grid.Column" Value="{Binding ColumnIndex}" /> 
        <Setter Property="Grid.Row" Value="{Binding RowIndex}" /> 
        </Style> 
       </ItemsControl.ItemContainerStyle> 
       <ItemsControl.ItemTemplate> 
    </ItemsControl> 

模板的XAML基本上正在填充在行/列用戶控件的集合。 最好我想在ViewModel中做到這一點,但現在代碼背後的解決方案也將工作。

+2

'ItemsControl'不跟蹤選定的項目。如果你想要這種行爲,使用類似ListBox的東西並覆蓋模板,就像[this](http://stackoverflow.com/a/9069382/302677) – Rachel

回答

12

ItemsControl無法選擇項目,只顯示集合。只有Selector或其中一個後代可以選擇項目。

對於你的情況,我認爲GridViewListView將適合。當用戶點擊一行中的控件時,事件會冒泡到ListView,該項目將被選中。您可以覆蓋默認樣式,使其不會顯示爲選定行:WPF ListView turn off selection

+0

如何在ListView中顯示UserControls集合? – WAQ

+1

您可以將它們設置爲項目的數據模板 – CKII