C# 从另一个程序集访问WPF窗口控件
我有一个库DLL和一个依赖于所述库的WPF测试exe。以下是测试exe: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
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启动。