代码之家  ›  专栏  ›  技术社区  ›  gideon

设置此。背景不起任何作用Silverlight 4

  •  1
  • gideon  · 技术社区  · 14 年前

    不确定我在这里做了什么蠢事,但这是我的代码:

    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 回复  |  直到 14 年前
        1
  •  2
  •   AnthonyWJones    14 年前

    如果要转到页面的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="{TemplateBinding Background}" 传递到控件的 背景 值显示到边框。

    两个 UserControl 派生自 控制 因此他们都获得了 背景 属性。但是,如果没有模板,这些控件中的任何一个都不会对属性有任何使用,并且修改它对任何内容都没有影响。