0

我为 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 吗?

4

1 回答 1

1

如果我正确解析了您的问题,我认为您可以这样做:

private void SourceFilePressed(object sender, RoutedEventArgs e)
{
    var obj = (sender as FrameworkElement).DataContext;
}

解释一下:发送者是事件的来源,所以是SurfaceButton. 它是 a FrameworkElement,因此具有DataContext属性。DataContext是一个继承属性,所以除非你在 上显式设置它,否则它将从它的父级( )SurfaceButton继承它。's是它正在模板化的数据项,因此您可以看到's将具有与其相同的对象。DataContextGridDataTemplateDataContextSurfaceButtonDataContext

于 2010-10-26T21:58:39.017 回答