我为LibraryContainer定义了以下DataTemplate:
<DataTemplate x:Key="ContainerItemTemplate">
<Grid>
<Border BorderThickness="1" BorderBrush="White" Margin="3">
<s:SurfaceTextBox IsReadOnly="True" Width="120" Text="{Binding Path=name}" Padding="3"/>
</Border>
<s:SurfaceButton Content="Expand" Click="SourceFilePressed"></s:SurfaceButton>
</Grid>
</DataTemplate>
SourceFilePressed如下:
private void SourceFilePressed(object sender, RoutedEventArgs e)
{
Logging.Logger.getInstance().log(sender.ToString());
e.Handled = true;
}
在SourceFilePressed方法中,我可以获取绑定到与按下的按钮位于同一网格中的SurfaceTextBox的对象吗?我可以在DataTemplate中以某种方式将此对象附加到Click-Event吗?
答案 0 :(得分:1)
如果我正确地解析了你的问题,我认为你可以这样做:
private void SourceFilePressed(object sender, RoutedEventArgs e)
{
var obj = (sender as FrameworkElement).DataContext;
}
要解释:发件人是事件的来源,所以它是SurfaceButton
。它是FrameworkElement
,因此具有DataContext
属性。 DataContext
是一个继承的属性,因此除非您在SurfaceButton
上明确设置,否则它将从其父级DataContext
继承它Grid
。 DataTemplate
的{{1}}是其模板化的数据项,因此您可以看到DataContext
与SurfaceButton
具有相同的对象。