如何在WPF中从子页面访问父窗口的控制?

5
我有一个名为"w"的窗口,其中包含多个控件和一个名为"f"的框架。我使用页面"p1,p2,..."来替换"f"。我想从"p1"访问"w"的控件。我该怎么做?

"w.xaml":

<Window x:Class="WpfApplication.w">
    <Grid>
        <TextBox x:Name="textBox_1" />
        <Frame x:Name="mainFrame" />
    </Grid>
</window>

"p1.xaml":

<Page x:Class="WpfApplication.p1">
    <Grid>
        <Button x:Name="button_1"
            Click="Button_Click" />
    </Grid>

"p1.xaml.cs":

private void Button_Click_Upload(object sender, RoutedEventArgs e)
{
    //set text of textBox_1
}
2个回答

10

你可以做

private void Button_Click_Upload(object sender, RoutedEventArgs e)
{
    ((w)App.Current.MainWindow).textBox_1.Text = "Your Text";
    //or 
    ((w)Window.GetWindow(this)).textBox_1.Text = "Your Text";
}

第一和第二个工作,但第三个不工作;错误显示:“MainWindow”不包含“Current”的定义。 - swapnil saha
抱歉,确实是个错误。 - KANAX

0

如果您不反对紧耦合,只需通过属性或构造函数参数将“w”与“p1”链接起来。您可能需要添加一个接口“Iw”来稍微减少耦合度。 另一种选择是为需要在p1中访问的w的子元素添加依赖属性,然后使用相对绑定进行绑定。 附言: 如果您展示一些代码,那么理解您的意图会更容易。


1
示例请看 :) - Yash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接