![](/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.