none
【超级疑难】怎么才能在资源文件内指定某元素的内容的样式? RRS feed

  • 问题

  • 比如现在XAML内容如下:

    Code Snippet

     

    <Button>
      <StackPanel>
        <Image Source="up.png"/>
        <Label>提交</Label>
      </StackPanel>
    </Button>

     

     

    这是一个带有小图标的提交按钮。

     

    我想在资源文件中定义Button的样式,比如改为橙色矩形边框、灰色与黑色的渐变背景。

    但是改完之后会发现“提交”二字还是黑的,很不协调,而我即使在样式中改变Button的Foreground为白色,也不会起任何作用。

    因为Label如果不设置Foreground的话,它会自动改成Black,而不遵循继承原则~

    样式修改代码内容大致如下:

    Code Snippet

    <Style TargetType="Button">
      <Setter Property="Foreground" Value="#FFF" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <Border x:Name="back" BorderThickness="1" BorderBrush="#A73">
              <Border.Background>
                <LinearGradientBrush>
                  <GradientBrush.GradientStops>
                    <GradientStopCollection>
                      <GradientStop Color="#999" Offset="0.0"/>
                      <GradientStop Color="#999" Offset="0.5"/>
                      <GradientStop Color="#777" Offset="0.51"/>
                    </GradientStopCollection>
                  </GradientBrush.GradientStops>
                </LinearGradientBrush>
              </Border.Background>
              <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>

     

    研究了半天ContentPresenter ,也没找出从哪可以改内容的样式,网上的文章也搜遍了,只有MSDN稍微提了句“如果模板定义包含 ContentPresenter,则 ControlTemplate 需要 TargetType 属性”,仍然是一头雾水,MSDN那文章链接:http://msdn.microsoft.com/zh-cn/library/ms745683.aspx

     

    恳请各位高手指点一二!

     

    我现在就是想把Button里面的Label显示的颜色改为白色。
    注意,不可以更改全局Label的颜色,因为我不想连带改变Button外的正常Label的颜色。
    也不能用定义x:Name的方式由Label显式载入样式,因为类似的按钮可能还有很多,一一设置很麻烦且失去了全局样式的使用意义了。

    2008年7月10日 20:17

答案

  • 楼主用的是WPF做的吧,不是SilverLight 2 Beta2

    SilverLight2B2没有Lable。

    建议还是不要弄wpf的模板,我总觉得wpf模板app会变,因为SilverLight2 Beta2的时候模板有很大改变了,跟wpf,还有以前的SilverLight Beta1都不兼容了,好多人SL Beta1的项目用了模板改了半个月,RTM出来时候不晓得会不会wpf也变,毕竟子集不应该比父集还特殊吧。如果是公司项目,那还是把样式写在xaml页面里面吧。外一变了,那是吃不了兜不住的。

    2008年7月10日 23:58
    版主