0

好吧,情况是这样的:我有一个 WPF 项目,其中包含一个带有 2 个 TabItem 的 TabControl。一个选项卡仅包含一个 TextBlock,另一个选项卡包含一个 TextBox 和一个按钮。我想要实现的是,当按下按钮时,第二个选项卡的 TextBox 内的文本出现在第一个选项卡的 TextBlock 中。

这应该是一项简单的任务,但我被困住了,因为我将每个选项卡都设计在一个单独的 XAML 中(并且我需要保持这种方式),并且我有这个 MainWindow.xaml:

<Window x:Class="TabsUserControl.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TabsUserControl"
    x:Name="root"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <TabControl Name="tabCtrl" HorizontalAlignment="Left" Height="210" VerticalAlignment="Top" Width="366" Margin="89,47,0,0">
        <local:UserTabControl1 Name="tab1"/>
        <local:UserTabControl2 Name="tab2"/>
    </TabControl>
</Grid>
</Window>

所有元素都有一个指定的名称,那么我如何访问它们以在第二个选项卡的 XAML 的 .cs 文件中编写方法?

提前致谢!

4

2 回答 2

0

由于您最明确地希望这些用户控件彼此分离,因此我将为 DataExchange 使用单独的 Messaging 类。MVVM Light Toolkit 中已经提供了这样的类。一个 UC 可以发布另一个可以接收的信息。

否则,如果您的用户控件与文本框提供文本作为依赖属性,则可以让您的窗口通过绑定进行同步。

于 2013-02-07T11:45:13.713 回答
0

您可以使用双向模式将绑定添加到每个文本框的文本属性。如果按下按钮:将第一个属性的值设置为第二个。

属性如下所示:

private string text1;
public string Text1
{
get{return this.text1;}
set{
this.text1 = value;
OnPropertyChanged("Text1");}
}

private string text2;
public string Text2
{
get{return this.text2;}
set{
this.text2 = value;
OnPropertyChanged("Text2");}
}

在按钮的 Click-Event(或 ExecuteCommand)中,您只需执行以下操作:

Text1 = Text2;

而已

于 2013-02-07T11:42:33.583 回答