![](/img/trans.png)
[英]How do I access my ComboBoxes inside of a GridViewColumn HeaderTemplate?
[英]Can't access the events inside the GridViewColumn's Content
当我将事件添加到ListViewItem
,
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewMouseDown" Handler="listViewItem_MouseDown" />
</Style>
然后在GridViewColumn
内部的内容中添加另一个事件,
<GridViewColumn Header="Action">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image x:Name="imgEdit"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Width="40"
Height="40"
Tag="{Binding ProductBarcode}"
Cursor="Hand"
MouseDown="img_MouseDown">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="/Resources/edit_button.png" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source" Value="/Resources/edit_button_hovered.png" />
</Trigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我无法在Image
控件中触发该事件。 引发事件的是ListViewItem
的事件。 如何在Image
控件中访问事件?
这是事件:
private void img_MouseDown(object sender, MouseButtonEventArgs e)
{
switch ((sender as Image).Name)
{
case "imgEdit":
MessageBox.Show("EDIT");
break;
default:
break;
}
}
private void listViewItem_MouseDown(object sender, RoutedEventArgs e)
{
MessageBox.Show("ROW CLICKED");
}
ListViewItem
的PreviewMouseDown
事件将始终在Image的MouseDown
事件之前引发。 路由事件的工作方式如下: https : //msdn.microsoft.com/zh-cn/library/ms742806(v=vs.110).aspx 。 PreviewMouseDown
是一个隧道事件,而MouseDown
是一个冒泡事件。
如果您不想在单击Image
时处理PreviewMouseDown
事件,则可以检查RoutedEventArgs
的OriginalSource
的类型,如果它是Image
则从事件处理程序中立即返回:
private void listViewItem_MouseDown(object sender, RoutedEventArgs e)
{
if (e.OriginalSource is Image)
return; // do nothing
MessageBox.Show("ROW CLICKED");
}
尝试:
private void listViewItem_MouseDown(object sender, MouseButtonEventArgs e)
{
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
MessageBox.Show("ROW CLICKED");
}));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.