如何从“设置”更新页面的控件;飞出
本文关键字:控件 飞出 更新 设置 | 更新日期: 2023-09-27 17:50:13
我正在构建一个metro风格的应用程序。我设计了一个"settings"飞出,用户可以在其中更改包含在应用程序的HomePageView页面的文本块的字体。
通过列出所有系统字体的组合框选择字体。一旦选择了字体(在设置弹出框的组合框中),HomePageView页面中的所有文本块都必须更新。
这是要更新的样式(位于standardstyles.xaml中):
<Style x:Key="timeStyle" TargetType="TextBlock">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontSize" Value="333.333"/>
<Setter Property="FontFamily" Value="Segoe UI"/>
</Style>
这是我用来更新文本块样式的代码,我访问SetTextBlockFont属性来更新文本块外观:
private void fontBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var res = new ResourceDictionary()
{
Source = new Uri("ms-appx:///Common/StandardStyles.xaml", UriKind.Absolute)
};
var style = res["timeStyle"] as Style;
style.Setters.RemoveAt(2);
style.Setters.Add(new Setter(FontFamilyProperty, new FontFamily("Arial")));
HomePageView homePageViewReference = new HomePageView();
homePageViewReference.SetTextBlockFont = style;
}
这是homeepageview .xaml.cs中的SetTextBlockFont属性,用于更新textblock (timeHour):
public Style SetTextBlockFont
{
set
{
timeHour.Style = value;
}
}
应用程序编译没有错误,但当我点击一个字体在组合框什么都没有发生。我想是因为我需要加载HomePageView页面的新实例homePageViewReference或者因为我需要重新加载页面或者类似的东西
我指出我不能使用Frame对象或NavigationService类因为这是一个metro应用。
你需要在你的视图中实现INotifyPropertyChanged或者你可以直接使用LayoutAwarePage给出的DefaultViewModel
Class A:INotifyPropertyChanged
{
#region EventHandler
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
public Style SetTextBlockFont
{
set
{
timeHour.Style = value;
RaisePropertyChanged("SetTextBlockFont");
}
}
}