Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户控件的实例可以是公共的吗?_C#_Wpf_Xaml_User Controls_Instance - Fatal编程技术网

C# 用户控件的实例可以是公共的吗?

C# 用户控件的实例可以是公共的吗?,c#,wpf,xaml,user-controls,instance,C#,Wpf,Xaml,User Controls,Instance,我希望这看起来不是一个奇怪的问题或者应该避免的问题,但是有没有可能将控件的实例公开以便可以在其他类中使用呢 例如,在XAML中,用户控件由 只需调用ControlName.UseMethod(),就可以在同一代码后面访问它就像我创建的任何类的实例一样 现在,虽然我可以在代码隐藏中将普通类的实例声明为public,然后自由使用它,但我在这里没有这样做的选项,因为它是在XAML中声明的,我不能直接公开 我需要能够在程序的其他部分访问用户控件的内容,并且不能使用我需要的静态方法 我在编程方面的经验很

我希望这看起来不是一个奇怪的问题或者应该避免的问题,但是有没有可能将控件的实例公开以便可以在其他类中使用呢

例如,在XAML中,用户控件由

只需调用
ControlName.UseMethod(),就可以在同一代码后面访问它就像我创建的任何类的实例一样

现在,虽然我可以在代码隐藏中将普通类的实例声明为public,然后自由使用它,但我在这里没有这样做的选项,因为它是在XAML中声明的,我不能直接公开

我需要能够在程序的其他部分访问用户控件的内容,并且不能使用我需要的静态方法

我在编程方面的经验很少,从书本和小项目中学习,这可以解释问题中的任何奇怪之处。希望没事


谢谢

你绝对不能把控制权公之于众。NET中的控件是其
表单
页面
窗口
等的私有成员变量。它们由编译器生成到相应的“隐藏”cs文件中,并在该点设置为私有。您可以使用返回它们的属性来公开它们:

public MyControl MyControlProperty { get { return myControlName; } }
现在,你真的不应该这样做。其他类不应该知道视图类的内部结构,它们应该调用方法、更改数据等以使这些内部结构发生更改

此外,由于这是WPF,您甚至不应该这样做,相反,您应该使用视图模型来调用其他视图模型(通常通过模型)上的方法,以使其关联的视图做出反应和更新


简言之,是的,你可以向全世界公开控制,但如果你必须这样做,你几乎肯定是完全错误的。

也就是说,如果你能告诉我我可以通过谷歌做得更好,我将不胜感激。任何可以访问用户控件实例上的控件的东西,以便我可以在运行时更新它们。至少,我可以解释得很好。@Gilgamesh你说得对,
UserControl
是一个类似于任何其他类的类,但同样地,
TextBox
也是这样。这里的基本概念是表单的控件是非常私有的。没有理由直接将它们暴露于其他对象,因为这会使耦合方式太紧。如果您决定这样做,只需使用我在答案中输入的属性方法(同样,这样做意味着您的设计遇到了真正的麻烦)。要想做得更好,请查看MVVM模式。这里有一个起点:啊,我明白你的意思。那我就避免走那条路了,因为我不想学那些讨厌的习惯。此外,我避免尝试使用MVVM的东西,因为我试图减少WPF的学习曲线,但我发现这样做不是一个好主意。谢谢你的帮助。@Gilgamesh如果你遇到任何还没有准备好成为SO问题的困惑,请到WPF室来。我和其他人很乐意帮助您学习一些更好的做法:)