2013-07-31 2 views
0

Я пытаюсь перейти на другую страницу из моего MainWindow в приложении WPF. В MainWindow есть только приветственный текст, и я хочу, чтобы он переместился на другую страницу через 4 секунды. Таймер работает нормально, но я получаю сообщение об ошибке:Переход на страницу wpf на основе таймера

«Ошибка 1« UbiTutorial.MainWindow »не содержит определения для« Frame »и никакого метода расширения« Frame », принимающего первый аргумент типа ' UbiTutorial.MainWindow '(вам не хватает директивы using или ссылки на сборку?) C: \ users \ thomas \ documents \ visual studio 2012 \ Projects \ UbiTutorial \ UbiTutorial \ MainWindow.xaml.cs 54 22 UbiTutorial "

в моем методе

if (introTime > 4) 
{ 
    this.Frame.Navigate(typeof(Touch)); 
} 

Visual Studio жалуется Рамочной частью.

ответ

0

Frame - это тип управления, а не контрольный экземпляр, не видя вашего Xaml. Я понятия не имею, что имя фрейма, которое вы добавили, вероятно, по умолчанию было frame1. Это то, что вам нужно будет использовать для доступа к Переместить метод. Надеюсь, это даст вам представление.

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Frame Height="100" HorizontalAlignment="Left" Margin="10,10,0,0" Name="frame1" VerticalAlignment="Top" Width="200" /> 
    </Grid> 
</Window> 

MainWindow.xaml.cs

using System.Windows.Threading; 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     DispatcherTimer introTime = new DispatcherTimer(); 
     public MainWindow() 
     { 
      InitializeComponent(); 
      introTime.Interval = TimeSpan.FromSeconds(4); 
      introTime.Tick += new EventHandler(introTime_Tick); 
      introTime.Start(); 
     } 

     void introTime_Tick(object sender, EventArgs e) 
     { 
      //this.frame1.Navigate(new Uri(@"http://www.google.com")); 
      this.frame1.Navigate(new UserControl1()); 
     } 
    } 
} 

UserControl1.xaml

<UserControl x:Class="WpfApplication1.UserControl1" 
      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" Background="Red" > 
    <Grid> 

    </Grid> 
</UserControl> 
+0

Спасибо, я Gott чтобы работать. Следующим шагом будет переход на дополнительные страницы, основанные на событиях на текущей странице в кадре. Как только пользователь выполнит что-то, загрузите следующую страницу. В частности, если пользователь коснулсяДалее на странице в течение 5 секунд, загрузите следующую страницу. Есть ли способ передать кадр в качестве параметра для каждой страницы, чтобы я мог поместить код на текущей странице для загрузки следующей страницы или, скорее, это делается путем возврата информации с текущей страницы в MainWindow, которая сообщает об этом загрузить новую страницу на фрейм? Спасибо! @ mark-hall –

+0

@ThomasCrosley Используете ли вы MVVM или просто код? Лично я бы позволил MainWindow обрабатывать его, чтобы ваша страница повышала событие и использовала его, чтобы определить, когда нужно обменивать страницы. –

+0

Я просто использую код позади. Вы бы рекомендовали использовать MVVM? Мне также понравился подход MainWindow, особенно если я когда-нибудь захочу избавиться от страницы или заменить свой заказ. –

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