繁体   English   中英

检测在列表框数据模板上选择的内容

[英]Detect what has been selected on a Listbox DataTemplate

我有一个列表框,该列表框绑定到包含两个元素的对象列表:字符串和图像

我想检测用户是否点击了图像或文本块

这是我尝试的:

这是我的xaml:

<ListBox x:name = "TheList"  ItemSource ="{Binding List}" SelectionChanged="SelectionChanged_1">
    <DataTemplate>
        <TextBlock Text = "{Binding Name}" />
        <Image ImageSource = "{Binding Picture}" />
        <StackPanel>
        <\StackPanel>
    <\DataTemplate>
</ListBox>

这是我后面的代码:

private void SelectionChanged_1(object sender, SelectionChangedEventArgs e)
{
    if (TheList.SelectedItem != null)
    {
        if(e.OriginalSource == sender as  TextBox ){
             MessageBox.Show("Text");

        }  else if(e.OriginalSource  == sender as Image ){

            MessageBox.Show("Image");

        }
    }
}

但是,如果我点击“消息框”上显示“文本”的图像,它将不起作用

如何检测图像或文本块是否被点击?

你可以试试:

<ListBox x:name = "TheList"  ItemSource ="{Binding List}" SelectionChanged="SelectionChanged_1">
<DataTemplate>
    <TextBlock Click=hTClick" Text = "{Binding Name}" />
    <Image Click="hIClick" ImageSource = "{Binding Picture}" />
    <StackPanel>
    <\StackPanel>
<\DataTemplate>

在后面的代码中:

private void hTClick(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show("text");
}
private void hIClick(object sender, SelectionChangedEventArgs e)
{
    MessageBox.Show("image");
}

这将显示您想要的内容。

您不能实现ListBox控件的SelectionChanged事件。 但是你可以这样

<ListBox x:name = "TheList"  ItemSource ="{Binding List}" SelectionChanged="SelectionChanged_1">
   <DataTemplate>
     <TextBlock Text = "{Binding Name}" Tap="txtBlock_Tap" />
      <Image ImageSource = "{Binding Picture}" Tap="img_Tap"/>
      <StackPanel>
       <\StackPanel>
    <\DataTemplate>
</ListBox>

 private void txtBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
      MessageBox.Show("TextBlock click");
      var item = TheList.SelectedItem as your Type;
     }

 private void img_Tap(object sender, System.Windows.Input.GestureEventArgs e)
     {
       MessageBox.Show("Image click");
       var item = TheList.SelectedItem as your Type;
     }

我终于找到了答案:

我必须添加这一行:

var myTappedobject = (Sender as FrameworkElement).DataContext as MyObject

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM