如何在WPF / XAML中更改事件的发件人

时间:2013-12-27 12:12:54

标签: c# wpf xaml event-handling

我想将事件的发件人设置为事件的实际发起人以外的其他人。为我的CImage类考虑这个简单的DataTemplate:

<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”事件处理程序需要访问“CImage”对象,其中“ImageSource”是属性,而不是“ImageSource”绑定到的“Image”对象。

有没有办法在事件本身中传达这些信息,或者我别无选择,只能让处理程序通过其他方式查找CImage?

1 个答案:

答案 0 :(得分:1)

发件人将永远是Image对象,您无法更改。

但是,在处理程序中,您可以访问DataContext Image CImage,它将成为private void MouseUpHandler(object sender, MouseButtonEventArgs e) { CImage instance = (CImage)((Image)sender).DataContext; } 的对象,因为DataTemplate的DataType是CImage:

{{1}}