2013-08-27 20 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またはその子孫の1つだけがアイテムを選択できます。

ListViewGridViewとなると思います。ユーザーが行のコントロールをクリックすると、イベントはListViewにバブルし、アイテムが選択されます。デフォルトのスタイルをオーバーライドして、選択した線として表示されないようにすることができます:WPF ListView turn off selection

+0

ListViewにUserControlsコレクションを表示するにはどうすればよいですか? – WAQ

+1

あなたのアイテムのデータテンプレートとして設定することができます – CKII

関連する問題