我想将事件的发送者设置为事件的实际发起者以外的其他内容。为我的 CImage 类考虑这个简单的数据模板:
<DataTemplate DataType="{x:Type er:CImage}">
<Grid VerticalAlignment="Center" HorizontalAlignment="Center" Margin="5">
<StackPanel Orientation="Vertical" MaxWidth="{Binding Image.Width}">
<Image Source="{Binding Image}" MouseUp="MouseUpHandler" />
<Label Content="{Binding ImageFile.Name}" />
<Label>
<TextBlock TextWrapping="WrapWithOverflow" Text="{Binding TagsJoined}" />
</Label>
</StackPanel>
</Grid>
</DataTemplate>
当用户单击此按钮时:
<Image Source="{Binding ImageSource}" MouseUp="MouseUpHandler" />
"MouseUpHandler"事件处理程序需要访问"ImageSource"是其属性的"CImage"对象,而不是"ImageSource"绑定到的"Image"对象。
有没有办法在事件本身中传达此信息,或者我别无选择,只能让处理程序通过其他方式查找 CImage?
发件人将始终是 Image 对象,您无法更改。
但是,在处理程序中,您可以访问Image
的DataContext
,这些将成为CImage
的对象,因为DataTemplate的数据类型是CImage:
private void MouseUpHandler(object sender, MouseButtonEventArgs e)
{
CImage instance = (CImage)((Image)sender).DataContext;
}