2017-11-15 10 views
0

私はDataTemplateを含むlsitboxを持っていて、そのDataTemplateの中にはGridが含まれています。私はMouseDown ClickListenerをグリッドに付けました。今私はそれをクリックするたびにそのグリッドの要素を取得したいです。 .csファイル内のグリッド内の要素にアクセスする方法は?

<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="222" 
Margin="28,75,0,0" VerticalAlignment="Top" Width="244" ItemTemplate=" 
{DynamicResource DataTemplate1}" BorderThickness="5,1"> 
     <ListBox.Resources > 
      <DataTemplate x:Key="DataTemplate1"> 
       <Grid Width="205" Height="84" MouseDown="ListClickListener"> 
        <Label x:Name="nameLabel" Content="{Binding FullName}" 
HorizontalAlignment="Left" Margin="68,0,0,0" VerticalAlignment="Top" 
Width="127" Height="31"/> 
        <Label x:Name="numberLabel" Content="{Binding 
PhoneNumber}" HorizontalAlignment="Right" Margin="0,31,10,0" 
VerticalAlignment="Top" Width="127" Height="26"/> 
        <Ellipse x:Name="ellipse" HorizontalAlignment="Left" 
Height="60" VerticalAlignment="Top" Width="60"> 
         <Ellipse.Fill> 
          <ImageBrush ImageSource="{Binding Picture}" 
Stretch="UniformToFill"/> 
         </Ellipse.Fill> 
        </Ellipse> 
       </Grid> 
      </DataTemplate>  
     </ListBox.Resources> 
    </ListBox> 

及び方法「ListClickListener」は次のとおりです。

private void ListClickListener(object sender, MouseButtonEventArgs e) 
     { 

     } 
+1

これらの要素で何をしたいですか?あなたは、WPFを使って物事を行う最良の方法ではないアプローチを選択しました。 –

+0

これらの要素の値を取得したいだけです。Labelのコンテンツ –

+0

Labelのコンテンツは、DataContectの 'FullName'プロパティにバインドされています。 '((FrameworkElement)sender).DataContext'をリストボックスに表示される項目の型にキャストします。アイテムクラスの名前が 'MyListBoxItemClass'の場合、' var vm =(MyListBoxItemClass)((FrameworkElement)sender).DataContext;を使用します。 var fullName = vm.FullName; ' –

答えて

0

あなたが望むすべてがコントロールから結合した値である場合は、あなたがするのコントロールをタッチする必要はありません。それ。実際、そうでない方がはるかに良いです。他のコードの修正を心配することなく、DataTemplateのXAMLを変更または再配置できるようにしたいと考えています。

ListBoxには、いくつかのクラスのコレクションが設定されています。これはあなたが対話したいクラスであり、乱雑なUIのものではありません。 WPFでは簡単です。

たとえば、ラベルの内容は、リストボックスアイテムのDataContextのFullNameプロパティにバインドされています。 ((FrameworkElement)sender).DataContextをリストボックスに表示される項目のタイプにキャストします。アイテムクラスの名前がMyListBoxItemClassであるとします:

private void ListClickListener(object sender, MouseButtonEventArgs e) 
{ 
    var vm = (MyListBoxItemClass)((FrameworkElement)sender).DataContext; 

    MessageBox.Show("FullName is " + vm.FullName); 
} 
+0

まさに私が望んでいた! –

関連する問題