Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# 从另一个程序集访问WPF窗口控件_C#_Wpf - Fatal编程技术网

C# 从另一个程序集访问WPF窗口控件

C# 从另一个程序集访问WPF窗口控件,c#,wpf,C#,Wpf,我有一个库DLL和一个依赖于所述库的WPF测试exe。以下是测试exe: using MyLibrary; namespace WpfTest { public partial class Window2 : Window { private MyLibrary _mylib; public Window2() { InitializeComponent(); this.Loade

我有一个库DLL和一个依赖于所述库的WPF测试exe。以下是测试exe:

using MyLibrary;

namespace WpfTest
{
    public partial class Window2 : Window
    {
        private MyLibrary _mylib;

        public Window2()
        {
            InitializeComponent();
            this.Loaded += window2Loaded;
        }

        void window2Loaded(object sender, RoutedEventArgs e)
        {
            _mylib = new MyLibrary(this);
        }
    }
}
在MyLibrary类(在DLL中)中,我有以下构造函数:

    public MyLibrary (System.Windows.Window window) // BREAKPOINT HERE.
    {
        ...
在上面的断点处,调试器显示我要访问的
TextBlock
(tb\u mp):


我需要做什么才能在Visual Studio中键入
window.tb\uCode>时,IntelliSense将提供以
window.tb\uMP
的形式完成它?

没有,您不能。“本地”窗口现在在
tb\u mp
local旁边显示一个信封图标,这意味着它是
内部
成员(请参见此处:)。Visual Studio的intellisense窗口不会列出您无权访问的成员,在本例中,是来自另一个项目的
内部成员

有三种选择:

  • 将访问修饰符(在原始项目中)更改为
    public

  • 使用反射访问字段(例如,
    FieldInfo fi=window.GetType().GetField(“tb\u mp”)

  • 使用
    VisualTreeHelper
    遍历窗口中的控件。这是一个更复杂的话题,在这里详细讨论:这里:


  • 非常感谢。直到今天,我还不知道信封图标,更不用说知道它的含义了!为
    tb\u mp
    提供
    x:FieldModifier=“public”
    打开了对它的访问,但我还必须将
    窗口
    变量转换为
    ((WpfTest.Window2)
    (当然,还要提供名称空间)以便IntelliSense启动。