不确定我是否在这里做了一些蠢事,但这是我的代码:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string s = this.NavigationContext.QueryString["type"];
if ( s == "add")
{
this.Background = new SolidColorBrush(Colors.Red);
}
else
{
this.Background = new SolidColorBrush(Colors.Blue);
}
}
什么都没发生?页面没有改变颜色?查询字符串完全没问题。我点击主页面上的一个按钮,然后我说frameMain.Navigate(new Uri("/AddEdit.xaml?type=edit", UriKind.Relative));
我做错了什么?
答案 0 :(得分:2)
如果您要为您的网页转到Xaml,请将Background="Blue"
添加到不会产生任何影响的顶级navigation:Page
元素。
Page
最高级别的孩子最有可能是一种面板类型,例如Grid
,并且很可能是默认名称LayoutRoot
。因此将代码更改为: -
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string s = this.NavigationContext.QueryString["type"];
if ( s == "add")
{
LayoutRoot.Background = new SolidColorBrush(Colors.Red);
}
else
{
LayoutRoot.Background = new SolidColorBrush(Colors.Blue);
}
}
<强>解释强>
只有Border
元素和Panel
元素实际上具有Background
的有效实现。
Control
基类型也有Background
属性,但它不知道如何处理它。它将它留给控件模板来决定如何处理Background
属性。在大多数情况下,模板将包含一个顶级Border
,其中包含其他内容Background="{TemplateBinding Background}"
,它将控件的Background
值传递给边框以供显示。
Page
和UserControl
都来自Control
,因此他们都获得Background
属性。但是,没有模板这些控件都不会对属性有任何用处,修改它对任何事情都没有影响。