我正在尝试从不同的用户控件调用用户控件的方法。我无法跟踪我尝试从中调用该方法的用户控件来调用该方法。
我正在尝试调用AddDeal.xaml中的以下方法.cs
public void loadDealProducts()
{
InfoBox.Information("loadDealProducts called.", "testing");
}
我正在跟踪AddDeal用户控件,并尝试使用以下方法调用文件AddDealProducts.xaml中的loadDealProducts()方法.cs
Window window = null;
if (sender is Window)
window = (Window)sender;
if (window == null)
window = Window.GetWindow(sender);
return window;
(window as AddDeal).loadDealProducts();
但是窗口返回空值,所以我无法调用方法加载交易产品。
除了使用 GetWindow 获取窗口之外,有没有办法获取用户控件?我尝试了Window.GetUserControl和UserControl.GetUserControl,但没有这样的方法。
sender 是来自 AddDeal.xaml 的 DependencyObject.cs当我单击 AddDeal.xaml 上的按钮时,我得到它,如下所示:
<Button Click="BtnAddProducts" CommandParameter="{Binding Path=ProductID}">Add Product</Button>
它调用以下内容:
private void BtnAddProducts(object sender, RoutedEventArgs e)
{
var button = (Button)sender as DependencyObject;
Window AddProductsDialog = new Window {
Title = "Add Products to Deal",
Content = new AddDealProduct(button, productID, false, 0)
};
AddProductsDialog.ShowDialog();
}
如您所见,我正在发送button
它是AddDeal.xaml.cs/xaml上的DependencyObject
。当它打开一个新窗口 AddDealProduct 时,它具有 AddDealProduct.xaml(UI 文件)及其 .xaml.cs 代码隐藏文件。在这个文件中,我想从调用用户控件(AddDeal)调用一个函数。
好的,我解决了。
我正在将从源窗口用户控件Button Click
事件中获取的DependencyObject sender
作为参数发送到另一个用户控件类。
然后,我使用发送方对象解析用户控件,并从不同的 UserControl 类调用其类中的函数。
要调用该函数,我执行以下操作:
AddDealUserControl ownerx2 = FindVisualParent<AddDealUserControl>(sender);
ownerx2.loadDealProducts();
FindVisualParent helper 类:
public static T FindVisualParent<T>(DependencyObject child)
where T : DependencyObject
{
// get parent item
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
// we’ve reached the end of the tree
if (parentObject == null) return null;
// check if the parent matches the type we’re looking for
T parent = parentObject as T;
if (parent != null)
{
return parent;
}
else
{
// use recursion to proceed with next level
return FindVisualParent<T>(parentObject);
}
}
希望对您有所帮助。