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

时间:2015-09-16 20:22:35

标签: c# wpf

我有一个库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_mp):

enter image description here

当我在Visual Studio中键入window.tb_时,我需要做什么,IntelliSense将提供以window.tb_mp完成它?

1 个答案:

答案 0 :(得分:2)

没什么,你做不到。本地人widnow在tb_mp本地旁边显示一个信封图标,这意味着它是internal成员(请参阅此处:https://msdn.microsoft.com/en-us/library/y47ychfe(v=vs.100).aspx)。 Visual Studio的智能感知窗口不会列出您无权访问的成员,在本例中为internal成员来自其他项目。

有三种选择:

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

  2. 使用反射来访问该字段(例如FieldInfo fi = window.GetType().GetField("tb_mp")

  3. 使用VisualTreeHelper遍历窗口中的控件。这是一个更复杂的主题,请在此详细讨论:How can I find WPF controls by name or type?此处:WPF: How do I loop through the all controls in a window?