“覆盖”XAML UserControl上的FontSize属性

时间:2014-07-09 03:01:49

标签: .net xaml user-controls windows-phone-8.1

我有一个包含TextBlock控件的Windows Phone 8.1项目的UserControl。我想使用UserControl从Control类继承的FontSize属性。但我无法覆盖FontSize属性,似乎没有我可以订阅的FontChanged事件。

最终,我希望能够在包含我的用户控件的页面的XAML中设置FontSize属性,并将其迁移到包含的TextBlock的FontSize属性/属性。

只是没有看到如何做到这一点。

First UserControl:

<UserControl x:Class="KeyPadButton">
    <Grid x:Name="MainGrid" Background="Gray" >
        <Border BorderBrush="Black" BorderThickness="5" Padding="3"  >
            <TextBlock x:Name="Button" Text="9" FontSize="2"/>
        </Border>
    </Grid>
</UserControl>

第二个UserControl:

<UserControl x:Class="KeyPad">
    <Grid>
        <local:KeyPadButton Text="0" FontSize="22"/>
    </Grid>
</UserControl>

包含页面:

<Page>
    <StackPanel>
        <local:KeyPad x:Name="KeyPad" FontSize="55"/>
    </StackPanel>
</Page>

如何在页面中设置KeyPad控件的FontSize并将其向下迁移到KeyPad中的KeyPadButton控件?

2 个答案:

答案 0 :(得分:0)

<Style TargetType="{x:Type local:TextBlock2}" BasedOn="{StaticResource styleMyTextBlock}" >
   <Setter Property="FontSize" Value="22" />
</Style>

XAML WITHOUT 必须明确关联要使用的“Style”。它直接根据类关联找到它。

<src:TextBlock2 Content="Now Works as expected"/>

不要使用x:key,因为如果你有x:key,它没有被类实例暗示,但没有它,直接类会自动找到它。

一个样式可以多次定义到同一个TARGET TYPE ......但是,一个可以有一个x:key引用,另一个可以有一个BasedOn引用。此外观与重载功能具有相同的编号,但数据类型参数不同。

“TargetType”的任何直接类实例都不会自动链接到正确的样式,几乎就像带有“x:key”的样式声明一样,需要类的任何实例在xaml中明确添加样式上下文控制。那么现在,如何实现这两种方式。我创建了一个以TargetType作为基类的SECOND样式,但是BasedOn指向了x:key引用的样式。这样,我得到了样式的默认自定义,但是仍然可以将它分配给基类和派生类,因此控件的所有3个版本都可以自动与相应的样式同步而不需要EXPLICIT引用。

<Style TargetType="TextBlock" x:Key="wpfBaseTextBlock">
   <Setter Property="FontSize" Value="11" />
</Style>

<Style TargetType="TextBlock" BasedOn="{StaticResource wpfBaseTextBlock}" />

<Style TargetType="{x:Type local:TextBlock2}" BasedOn="{StaticResource wpfBaseTextBlock}">
   <Setter Property="Foreground" Value="Blue" />
</Style>

我们可以使用或不使用显式样式关联的所有3个“类”。

答案 1 :(得分:0)

嗯,事实证明机制已经存在。我只需要从两个UserControls中删除FontSize属性,然后KeyPad和KeyPadButton使用包含页面中KeyPad控件的FontSize属性的值,然后传递给KeyPadButton控件中的文本块。

(没关系。)

相关问题