gpt4 book ai didi

c# - 如何调用某些 WPF 用户控件的 "hidden"方法

转载 作者:行者123 更新时间:2023-11-30 15:05:59 31 4
gpt4 key购买 nike

这看起来很奇怪,但我将一些自定义 WPF 用户控件转换为 WPF 用户控件,我必须调用一些包含所有这些控件的方法。是否可以?怎么做?

foreach (var kid in ((MainWindow)App.Current.Windows[0]).MainCanvas.Children)
{
string kidType = kid.GetType().FullName;
if (kidType.EndsWith("MyUserControl"))
{
UserControl myUserControl = (UserControl)kid;

myUserControl.Hide() // <- this method I want to call bu it is "hidden" because of teh casting which doesn't provide access to it.

注意:Hide() 方法是公开的。

解决方案:

大家好!

感谢您的意见!最后我得到了解决方案。

foreach (var kid in ((MainWindow)App.Current.Windows[0]).MainCanvas.Children)
{
string kidType = kid.GetType().FullName;
if (kidType.EndsWith("UControl"))
{
Type t = kid.GetType();
object obj = Activator.CreateInstance(t);
t.InvokeMember("Hide", BindingFlags.Default | BindingFlags.InvokeMethod, null, obj, new object[] { });

// And here there is a 1000% better solution of @Erno
// dynamic myUserControl = kid;
// myUserControl.Hide();
}
}

在哪儿

public void Hide()
{
// do stuff
}

最佳答案

让你所有的用户控件实现一个接口(interface)

public interface ICanHide
{
void Hide();
}

然后这样做

foreach (var kid in ((MainWindow)App.Current.Windows[0]).MainCanvas.Children)  
{
var tmp = kid as ICanHide;
if (tmp != null)
{
tmp.Hide();
}
}

关于c# - 如何调用某些 WPF 用户控件的 "hidden"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8414977/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com