[英]What is the best way to validate that a specific option has been selected in an asp:ListBox?
[英]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.