WPF引用来自另一个模块,类或窗口的文本框文本



我有几个命名的文本框,其中包含我希望保存在文件中的值。我曾经能够通过引用像这样的另一个模块引用文本框来实现此操作。

owrite.Writeline(form1.textbox1.text)

使用WPF我无法弄清楚如何做到这一点。我可以在mainwindow.xaml.vb中使用此代码

进行操作。
owrite.Writeline(me.textbox1.text)

,但是当我从另一个模块尝试时,我无法公开(查找)文本框。我可以从Mainwindow内部做到这一点,这是事实,但是我也想知道如何。

编辑:谢谢您的所有帮助。根据下面的一些建议,我使用以下内容来创建我的设置文档,从而从程序中的任何模块中都可以写出这些文档。正如我所说

Dim mainWin = Application.Current.Windows.OfType(Of MainWindow).FirstOrDefault()
            Using oWrite As New System.IO.StreamWriter(AppPath & "SETTINGSUser Config.txt", False)
                oWrite.WriteLine(mainWin.Text_ServerName.Text)
                oWrite.WriteLine(mainWin.Text_DBName.Text)
                oWrite.WriteLine(mainWin.Text_ServerUserName.Text)
                oWrite.WriteLine(mainWin.Text_ServerPass.Text)
                oWrite.WriteLine(mainWin.Text_StorageDriveLetter.Text)
                oWrite.Close()
            End Using

您可以使用x:fieldmodifier指令更改控制字段的修饰符,以便能够从任何其他类访问它:

<TextBox x:Name="textbox1" x:FieldModifier="public" />

X:fieldModifier: https://msdn.microsoft.com/en-us/library/aa970905(v = vs.110).aspx

另一个选项是在视图的代码范围类中定义属性,并通过此属性访问控件:

Class MainWindow
    Public ReadOnly Property TheTextBox() As TextBox
        Get
           Return textbox1
        End Get
    End Property
End Class

在这两种情况下,您都需要获取对窗口的引用,然后才能访问其任何控件。例如,您可以使用application.current.windows Collection获取对打开窗口的引用:

Dim mainWindow As MainWindow = Application.Current.Windows.OfType(Of MainWindow).FirstOrDefault()
Dim s As String = mainWindow.TheTextBox.Text

只要您在背后的代码中命名,您就应该能够:

var data = MyTextBox.Text;
//Do whatever with your data.

最新更新