【问题标题】:WPF referencing a text box text from another module, class or windowWPF 引用来自另一个模块、类或窗口的文本框文本
【发布时间】:2016-12-27 04:33:03
【问题描述】:

我有几个命名文本框,其中包含我希望保存在文件中的值。我以前可以通过引用另一个模块中的文本框来在winform中做到这一点

owrite.Writeline(form1.textbox1.text)

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

owrite.Writeline(me.textbox1.text)

但是当我从不同的模块尝试它时,我无法公开(找到)文本框。我可以在 MainWindow 中执行此操作,这是真的,但我也想知道如何操作。

编辑: 感谢您的所有帮助。根据下面的一些建议,我使用以下内容创建了我的设置文档,该文档基本上可以从程序中的任何模块编写。正如我所说,这不是编写 WPF 代码和分离 UI 线程和数据的正确方法,但它适合我的目的:(文本被命名为文本框)

Dim mainWin = Application.Current.Windows.OfType(Of MainWindow).FirstOrDefault()

            Using oWrite As New System.IO.StreamWriter(AppPath & "\SETTINGS\User 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

【问题讨论】:

  • "从不同的模块尝试。"表示不同的窗口?
  • 是的,一个不同的窗口可能是一个可以应用的实例。然而,我经常只创建代码模块来组织我的代码。

标签: wpf vb.net


【解决方案1】:

您可以使用 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 集合来获取对打开窗口的引用:

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

【讨论】:

  • 因为我只想在一个花费不到一秒的时间并且由按钮单击触发的例程中获取值,所以我只是使用了窗口引用。它可能不完全符合 UI 和数据分离的精神,但它对我的应用程序有效。谢谢
【解决方案2】:

只要你在后面的代码中命名你应该可以:

var data = MyTextBox.Text;

//Do whatever with your data.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多