WPF如何覆盖setter属性

3

我需要在XAML中的一个标签上应用样式:

<Style x:Key="TreatEye" TargetType="Label">
        <Setter Property="Foreground" Value="#d1d1d1" />
        <Setter Property="FontWeight" Value="Bold" />
        <Setter Property="FontSize" Value="30" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Label">
                    <Canvas>                            
                        <TextBlock x:Name="retreatText" Canvas.Left="80" Canvas.Top="5" FontSize="16"  Text="Retreatment"/>                                                        
                        <TextBlock x:Name="bioinsulatorText" Canvas.Left="21" Canvas.Top="33" Text="Bioinsulator" />
                        <TextBlock x:Name="kxlText" Canvas.Left="21" Canvas.Top="70" Text="KXL Kit" />
                    </Canvas>
...

我看到的问题是"reatreatText"的FontSize属性没有被覆盖为30的setter值。这个构建过程很好,但最终显示的"reatreatText"大小为30。为什么这个值没有被覆盖呢?
提前感谢。

你期望 retreatText 有什么字体大小?如果我理解正确,它将具有字体大小为16。 - Aviad P.
2个回答

3

抱歉,但我在Kaxaml中尝试您的代码,结果如预期:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
  <Style x:Key="TreatEye" TargetType="Label">
        <Setter Property="Foreground" Value="#d1d1d1" />
        <Setter Property="FontWeight" Value="Bold" />
        <Setter Property="FontSize" Value="30" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Label">
                    <Canvas>                            
                        <TextBlock x:Name="retreatText" Canvas.Left="80" Canvas.Top="5" FontSize="16" Text="Retreatment"/>                                                        
                        <TextBlock x:Name="bioinsulatorText" Canvas.Left="21" Canvas.Top="33" Text="Bioinsulator" />
                        <TextBlock x:Name="kxlText" Canvas.Left="21" Canvas.Top="70" Text="KXL Kit" />
                    </Canvas>
                </ControlTemplate>
        </Setter.Value>                
      </Setter>
     </Style>
    </Page.Resources>

  <Grid>  
    <Label Style="{StaticResource TreatEye}">Ejemplo</Label>
  </Grid>
</Page>

结果:

替代文本 http://img231.imageshack.us/img231/695/capture2p.png


注:该内容为HTML标记,已翻译为对应的HTML标记。

你是对的!运行应用程序后,它正确地显示了。问题出在我用于开发的Visual Studio XAML解释器上。它没有正确地解释新的字体大小。 - BabaBooey

0
你需要在 TextBlock 上设置一个 TemplateBinding。
<TextBlock x:Name="retreatText"
           Canvas.Left="80" 
           Canvas.Top="5" 
           FontSize="{TemplateBinding FontSize}" 
           Text="Retreatment"/> 

这就是设置器属性传播到内部结构的方式。


糟糕,我误读了问题。在 TextBlock 中明确设置大小应该会将大小固定在 16 上。 - SergioL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接