我有一个UserControl(称为发票),其中一个文本框( txtReferenceCode )托管在MainWindow上的TabControl( myTabControl )中。从UserControl我调用一个窗口( SearchWindow ),其中包含一个库存项目列表。该窗口需要将一个字符串值返回到UserControl包含的文本框。我无法从窗口访问UserControl上的文本框,因此无法将字符串值从窗口传递到text属性。
UserControl是一个作为新tabItem加载的实例(可能有许多作为tabitems的内容打开。)我只需要影响UserControl的当前tabitem实例。
例如:(按钮单击SearchWindow中的事件)
Invoice.txtReferenceCode.Text = SearchWindow.txtReferenceCode.Text
我需要一个简单的简单解决方案,最好是在VB中(但我很乐意接受C#)。
答案 0 :(得分:3)
我明白了!我在这里发布解决方案,以解决任何困扰这个问题的人。
<UserControl x:Class="Invoice"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<TextBox x:Name="txtReferenceCode" Width=100 />
</UserControl>
<Window x:Class="SearchWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<TextBox X:Name="TextToChangeTextBox" Width=100 />
</Window>
向您的窗口添加属性
Class SearchWindow
Public ReadOnly Property TextValue
Get
Return TextToChangeTextBox.Text
End Get
End Property
...
End Class
现在您可以使用窗口中的属性将字符串传递给UserControl上的TextBox。
Public Class Invoice
Private Sub SetValueToTextBox
Dim win As New SearchWindow
win.ShowDialog()
txtReferenceCode.Text = win.TextValue
End Sub
...
End Class
*
*
答案 1 :(得分:1)
有更好的方法可以做到这一点(即在两个窗口之间共享一个视图模型,并让绑定根据需要更新文本框)。
但如果您坚持这样做,请尝试在文本框中添加一个公共修饰符,以便您可以按照自己的意愿访问它。
<TextBox Name="txtReferenceCode" x:FieldModifier="public"/>