我是UWP的新手,我试图在多个页面上的Windows核心IOT应用上显示时钟。最好的方法是什么?
我尝试使用类的时间并动态更新它并将其与标头绑定,但是如何绑定来自"模板的标头"?我希望将时钟输入的标题位于我在应用程序的所有页面上使用的ResourceDictionary
中。或者我应该将时钟放在App.xaml
中,但即使在这种情况下,如何将其绑定到标题以便始终更新?
我是否需要在课堂上实施INotifyPropertyChanged
,或者还有其他方法吗?
谢谢。
编辑: (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 :(得分:0)
我将在这里讨论,并建议不要在应用程序的每个页面中添加相同的元素,而应使用两个框架。
前哨框架用于每页上的元素。这可以是你的标题,菜单,更新时间 - 你的名字。使处理该内容更容易。
使用它放置第二帧,并将其用于页面之间的导航。看看我们的应用程序 - 它有一个垂直的标题&#34;标记为&#39; Page 1&#39;,右侧有&#39; Page 2&#39; - 用于导航的那个。
答案 1 :(得分:0)
您不需要将时钟放在每个页面上。您可以使用Frame
控件将其他网页托管为MainPage
的内容。把时钟放在MainPgae&#34;标题&#34;上。其他页面之间的导航发生在时钟区域之外。然后,您只能更新MainPage中的时钟并在其他页面之间共享。
以下是您可以参考的简单示例:
<强> 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");
}
}