0

UWPが初めてで、複数のページにWindowsコアIOTアプリケーションのクロックを表示しようとしています。これを行う最善の方法は何でしょうか?C#:Windowsコアの複数ページに時計を表示する方法IOTアプリケーション

クラスを使用して動的に更新してヘッダーとバインドしようとしましたが、 "テンプレート"のヘッダーをどのようにバインドしますか?私はクロックを入れたいヘッダは、私がアプリケーションのすべてのページで使用するResourceDictionaryにあります。または、クロックをApp.xamlに入れてください。ただし、この場合でも、ヘッダーにバインドして常に更新されるようにするにはどうすればよいですか?

私のクラスにINotifyPropertyChangedを実装する必要がありますか、別の方法がありますか?

ありがとうございます。

EDIT:(05/17)

これは、ヘッダ

ResourceDictionnaryためのコードです:私は手足に出て行くつもりです

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="using:Project.Resources" 
x:Class="Project.Header"> 
<!-- ... --> 
    <!-- Header --> 
    <DataTemplate x:Key="Header" x:DataType="local:Header"> 
     <TextBlock x:Name="labelHeader" Text="{x:Bind Time, Mode=OneWay}"/> 
    </DataTemplate> 
<!-- ... --> 
</ResourceDictionary> 
+0

タイマー[このような](http://stackoverflow.com/questions/38562704/make-clock-uwp-c)を使用して時刻を更新できます。ヘッダーについては、ここにコードを表示することをお勧めします。 –

+0

@Rita Han - MSFTコメントありがとうございました。私は1ページのクロックを更新する際に問題はありません。私がやっていることは、複数のページにクロックの同じコードをバインドすることです。私はそれを1つのページだけにバインドすれば動作します。どうすれば同じコードを複数のページで「共有」することができますか、一般的にこのようなもの(複数のページ間で共有されていても動的に変更されるもの)をどのように更新すればよいでしょうか。 –

答えて

0

あなたはすべてのページへのクロックを配置する必要はありません。 Frameコントロールを使用して、他のページをMainPageのコンテンツとしてホストすることができます。 MainPgaeの "ヘッダー"に時計を入れてください。他のページ間のナビゲーションはクロック領域外で行われます。その後、メインページでのみ時計を更新し、他のページ間で共有することができます。

次はあなたが参照できる簡単なサンプルです:MainPage.xamlを

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <TextBlock Text="{Binding Time}" Margin="20,5,5,5"/> 
    <StackPanel> 
     <Button Name="Page1" Content="Page1" Click="Page1_Click" /> 
     <Button Name="Page2" Content="Page2" Click="Page2_Click" /> 
     <Button Name="Page3" Content="Page3" Click="Page3_Click" /> 
    </StackPanel> 
    <StackPanel VerticalAlignment="Center"> 
     <Frame Name="MyFrame"></Frame> 
    </StackPanel> 
</StackPanel> 

MainPage.xaml.cs

Clock clock = new Clock(); 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     this.DataContext = clock; 
     clock.InitClock(); 
    } 

    private void Page1_Click(object sender, RoutedEventArgs e) 
    { 
     MyFrame.Navigate(typeof(Page1)); 
    } 

    private void Page2_Click(object sender, RoutedEventArgs e) 
    { 
     MyFrame.Navigate(typeof(Page2)); 
    } 

    private void Page3_Click(object sender, RoutedEventArgs e) 
    { 
     MyFrame.Navigate(typeof(Page3)); 
    } 

Clock.cs

public class Clock : INotifyPropertyChanged { DispatcherTimer Timer = new DispatcherTimer(); public string _time { get; set; } public string Time { get { return _time; } set { _time = value; OnPropertyChanged("Time"); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string name) { PropertyChangedEventHandler hander = PropertyChanged; if (hander != null) { hander(this, new PropertyChangedEventArgs(name)); } } public void InitClock() { Timer.Tick += Timer_Tick; Timer.Interval = new TimeSpan(0, 0, 1); Timer.Start(); } private void Timer_Tick(object sender, object e) { Time = DateTime.Now.ToString("h:mm:ss tt"); } } 
+0

例をありがとう! –

0

アプリケーションのすべてのページに同一の要素を追加する代わりに、2つのフレームを使用することをお勧めします。

アウトポストフレームは、すべてのページに存在する要素に使用されます。それはあなたのヘッダー、メニュー、更新時間になります。名前を付けてください。そのコンテンツを扱いやすくします。

2番目のフレームを置き、それをページ間のナビゲーションに使用します。私たちのアプリを見てみましょう - それは垂直な "ヘッダー"は "ページ1"とマークされ、右側は "ページ2" - ナビゲーションに使用されるものです。

Two frames

+0

ありがとう、私はこれが多くを単純化することを理解する、私は私がアプリで実装する必要があるすべての他のものを完了した後にそれをやろうとします..一方で誰かが私はすでにまずはその方法を試してみましょう。 –

+0

私はそれを試していただきありがとうございます。私は例のために@ Rita Han - MSFTの解答を解決策としてマークします。ありがとうございます –

関連する問題