установка переменных из фрейма окна теперь видна, WPF c#

Я делаю приложение, в котором я открываю несколько окон в разное время, и каждое окно имеет рамку, которая объединяет несколько страниц по клику.

Что мне нужно, так это взять переменную MainWindow со страницы, построенной по кадрам.

делать это:

 public partial class SearchPage : Page
    {
        public SearchPage()
        {
            InitializeComponent();
            Window mainWindow = Application.Current.MainWindow;
        }
    }

Однако он принимает открытым первое Окно, причем не текущие, а то, которое всегда держит меня открытым до запуска программы. Нет способа получить родительское окно времени, которое видно? I, чтобы закрыть перегородку на Visibility.Hidden(); и снова открыть Visibility.Visible();

Я использую Mahapps MetroWindow.


person Mr. Developer    schedule 22.01.2016    source источник
comment
Пожалуйста, опубликуйте больше кода, и все еще немного неясно, чего вы пытаетесь достичь. Application.Current.MainWindow всегда будет давать вам первое окно, вы можете получить доступ к другой коллекции окон с помощью App.Current.Windows.   -  person lena    schedule 22.01.2016
comment
я пытаюсь получить страницу после InitializeComponent, я добавил код из codebehind SearchPage   -  person Mr. Developer    schedule 22.01.2016
comment
Итак, вам нужно MainWindow или родительское окно SearchPage? А что вы хотите сделать с окном? Можете ли вы также добавить некоторый код, где вы отображаете свою страницу?   -  person lena    schedule 22.01.2016
comment
у меня есть MainWindow.xaml внутри фрейма, который загружает SearchPage.xaml, я хочу получить переменные текстового поля из MainWindow.xaml   -  person Mr. Developer    schedule 22.01.2016


Ответы (2)


Не уверен, что это то, что вам нужно, мне нужно больше кода, извините. Здесь я попытался сделать то же самое (как я думаю), что вы делаете. Пожалуйста, поправьте меня, если я неправильно понял.

MainWindow.xaml

<Window x:Class="WpfApplication2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Main Window" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
    <StackPanel>
        <TextBox x:Name="textbox" Text="test" TextChanged="textbox_TextChanged"></TextBox>
    <Frame x:Name="fr">            
    </Frame>
    </StackPanel>
</Grid>

MainWindow.xaml.cs

using System;
using System.Windows;

namespace WpfApplication2
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            fr.Navigate(new Uri("Page1.xaml", UriKind.Relative));
        }

        private void textbox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
        {
            if (fr != null) fr.Refresh();
        }
    }
}

Страница1.xaml

<Page x:Class="WpfApplication2.Page1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  mc:Ignorable="d" 
  d:DesignHeight="300" d:DesignWidth="300"
Title="Page1">
<Grid>
    <StackPanel>
    <TextBlock>MY PAGE</TextBlock>
    <TextBlock>The text in window is: </TextBlock>
        <TextBlock x:Name="tb"></TextBlock>
</StackPanel>
</Grid>

Page1.xaml.cs

using System.Windows.Controls;

namespace WpfApplication2
{
    public partial class Page1 : Page
    {
        public Page1()
        {
            InitializeComponent();
            MainWindow w = (MainWindow) App.Current.MainWindow;
            tb.Text = w.textbox.Text;
        } 
    }
}
person lena    schedule 22.01.2016

Вы можете подняться по визуальному дереву, чтобы найти соответствующий экземпляр MetroWindow:

var window = this.TryFindParent<MetroWindow>();

TryFindParent — это метод расширения, определенный в MahApps.Metro.Controls.TreeHelper, поэтому вы должны добавить using MahApps.Metro.Controls;

person Thomas Freudenberg    schedule 22.01.2016