设置this.Background什么都不做silverlight 4

时间:2010-11-20 07:52:38

标签: silverlight silverlight-4.0 background-color

不确定我是否在这里做了一些蠢事,但这是我的代码:

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));

我做错了什么?

1 个答案:

答案 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值传递给边框以供显示。

PageUserControl都来自Control,因此他们都获得Background属性。但是,没有模板这些控件都不会对属性有任何用处,修改它对任何事情都没有影响。