WPF-如何访问不同选项卡中的元素,这些选项卡是在单独的XAML中定义的

本文关键字:选项 定义 XAML 单独 元素 访问 何访问 WPF- | 更新日期: 2023-09-27 17:58:21

情况是这样的:我有一个WPF项目,它包含一个带有2个TabItems的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文件中为第二个选项卡编写方法?

提前感谢!

WPF-如何访问不同选项卡中的元素,这些选项卡是在单独的XAML中定义的

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

属性看起来像:

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");}
}

在你的按钮的点击事件(或执行命令)中,你只需要做:

Text1 = Text2;

就是

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

否则,如果带有文本框的用户控件将text提供为依赖属性,则可以让Window通过绑定进行同步。