如何在内容呈现器中获取 UI 对象?

How do I get the UI object inside of a content presenter?

我有一个 ItemsControl 通过绑定显示列表。该列表属于 ViewModel 类型,然后在 DataTemplate 中引用该类型以显示按钮。该按钮将其 UID 绑定到视图模型中的 GUID。当一个新的视图模型被添加到绑定列表时,我需要获取将被添加的按钮,因为按钮需要能够被用户dragged/dropped。目前我能得到的最接近的是找到显示按钮的 ContentPresenter,但该 ContentPresenter 的内容属于视图模型类型。

有没有办法找到添加的按钮?还是我不应该使用 DataTemplate 并自己创建按钮来访问它们?

我已使用 VisualTree 助手获取内容展示器,但未能找到按钮。

您可以处理 ButtonLoaded 事件:

<DataTemplate>
    <Button Loaded="OnButtonLoaded" ... />

private void OnButtonLoaded(object sender, RoutedEventArgs e)
{
    Button button = (Button)sender;
    //...
}

您将无法使用 VisualTreeHelper 获得对它的引用,直到它实际被添加到可视化树并无论如何加载。