0

我正在尝试使用以下代码从 WPf 中的 MainWindow 调用另一个类中的文本框:

 Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)

 Mainwindowtext2.Text = DirectCast(Application.Current.MainWindow, Window1).text1.Text

 End Sub

当我编译时没有错误,但是在单击按钮后出现此错误

InvalidCastException was unhandled
"Unable to cast object of type 'WpfApplication1.MainWindow' to type 'WpfApplication1.Window1'."

在 MainWindow 中是否有另一种方法可以从另一个类中获取控件?

4

2 回答 2

1

答案在您得到的错误代码中:

无法将“WpfApplication1.MainWindow”类型的对象转换为“WpfApplication1.Window1”类型。

您拥有的对象是“WpfApplication1.MainWindow”类型。这意味着您不能将其转换为“WpfApplication1.Window1”。

因为您的根命名空间是“WpfApplication1”,所以代码应为:

Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
    Mainwindowtext2.Text = DirectCast(Application.Current.MainWindow, MainWindow).text1.Text
End Sub

为了理解原因,静态属性Application.Current持有对类的引用Application。它的MainWindow属性是 type Window。在您的应用程序中,您的主窗口是 type MainWindow,它派生自Window,因此可以从该Application.Current.MainWindow属性返回。这就是为什么您需要将其转换为MainWindow.

编辑

如果您尝试获取与主窗口不同的窗口的实例,则可以使用应用程序的 Windows 属性:

Mainwindowtext2.Text = Application.Current.Windows.OfType(Of Window1)().First().text1.Text

WPF 创建支持字段的方式,只要类在同一个程序集中,这应该可以工作。如果不是,请考虑创建一个只读属性来公开文本,或在 XAML 中设置FieldModifier 属性。

于 2013-06-25T20:32:12.990 回答
0
Please change your code:

Mainwindowtext2.Text = DirectCast(Application.Current.Window1, Window1).text1.Text

希望这可以帮助你...

试试这个......你可以使用如下的绑定概念:

在 .CS 文件中:

Private _TextBoxName As String

Public Property TextBoxName() As String
    Get
        Return _TextBoxName
    End Get
    Private Set(ByVal value As String)
        _TextBoxName = value
    End Set
End Property

在 Xaml 中:

< TextBox Text="{Binding TextBoxName}"/>

现在您可以使用 Textbox 的值,如下所示:

Window1textbox.Text = mainwindow.TextBoxName
于 2013-06-26T04:24:36.743 回答