2016-01-22 5 views
0

Я создаю приложение, в котором я открываю несколько окон в разное время, и каждое окно имеет фрейм, который включает в себя щелчок по нескольким страницам.теперь отображаются переменные из окна, WPF C#

Мне нужно, чтобы я взял переменную MainWindow на странице, построенной по кадру.

делают так:

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

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

Я использую mahapps metroWindow

+1

Пожалуйста, напишите больше кода, и все еще немного неясно, чего вы пытаетесь достичь. 'Application.Current.MainWindow' всегда предоставит вам первое окно, вы можете получить доступ к другой коллекции окон с помощью' App.Current.Windows'. – lena

+0

Я пытаюсь получить страницу после InitializeComponent, я добавил код из codebehind SearchPage –

+0

Так вам нужно MainWindow или родительское окно SearchPage? И что вы хотите сделать с окном? Можете ли вы также добавить код, где вы показываете свою страницу? – lena

ответ

0

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

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

Page1.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; 
     } 
    } 
} 
0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^