如何在内容呈现器中获取 UI 对象?
How do I get the UI object inside of a content presenter?
我有一个 ItemsControl
通过绑定显示列表。该列表属于 ViewModel 类型,然后在 DataTemplate
中引用该类型以显示按钮。该按钮将其 UID 绑定到视图模型中的 GUID。当一个新的视图模型被添加到绑定列表时,我需要获取将被添加的按钮,因为按钮需要能够被用户dragged/dropped。目前我能得到的最接近的是找到显示按钮的 ContentPresenter,但该 ContentPresenter 的内容属于视图模型类型。
有没有办法找到添加的按钮?还是我不应该使用 DataTemplate
并自己创建按钮来访问它们?
我已使用 VisualTree 助手获取内容展示器,但未能找到按钮。
您可以处理 Button
的 Loaded
事件:
<DataTemplate>
<Button Loaded="OnButtonLoaded" ... />
private void OnButtonLoaded(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
//...
}
您将无法使用 VisualTreeHelper
获得对它的引用,直到它实际被添加到可视化树并无论如何加载。
我有一个 ItemsControl
通过绑定显示列表。该列表属于 ViewModel 类型,然后在 DataTemplate
中引用该类型以显示按钮。该按钮将其 UID 绑定到视图模型中的 GUID。当一个新的视图模型被添加到绑定列表时,我需要获取将被添加的按钮,因为按钮需要能够被用户dragged/dropped。目前我能得到的最接近的是找到显示按钮的 ContentPresenter,但该 ContentPresenter 的内容属于视图模型类型。
有没有办法找到添加的按钮?还是我不应该使用 DataTemplate
并自己创建按钮来访问它们?
我已使用 VisualTree 助手获取内容展示器,但未能找到按钮。
您可以处理 Button
的 Loaded
事件:
<DataTemplate>
<Button Loaded="OnButtonLoaded" ... />
private void OnButtonLoaded(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
//...
}
您将无法使用 VisualTreeHelper
获得对它的引用,直到它实际被添加到可视化树并无论如何加载。