【问题标题】:"Override" the FontSize property on a XAML UserControl“覆盖” XAML UserControl 上的 FontSize 属性
【发布时间】:2014-07-09 03:01:49
【问题描述】:

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

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

只是不知道该怎么做。

第一个用户控件:

<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 x:Class="KeyPad">
    <Grid>
        <local:KeyPadButton Text="0" FontSize="22"/>
    </Grid>
</UserControl>

包含页面:

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

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

【问题讨论】:

  • 你能分享你的包含 UserControl 的 XAML 吗?

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


【解决方案1】:
<Style TargetType="{x:Type local:TextBlock2}" BasedOn="{StaticResource styleMyTextBlock}" >
   <Setter Property="FontSize" Value="22" />
</Style>

XAML 工作无需必须明确关联要使用的“样式”。它直接根据类关联找到它。

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

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

一个样式可以多次定义到同一个目标类型...但是,一个可以有一个x:key 引用,另一个可以有一个BasedOn 引用。这看起来就像重载一个函数具有相同的数字,但不同的数据类型参数。

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

<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 个“类”。

【讨论】:

    【解决方案2】:

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

    (没关系。)

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 2014-08-18
      • 2011-01-25
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多