2014-07-09 46 views
0

我有一個包含TextBlock控件的Windows Phone 8.1項目的UserControl。我想使用UserControl從Control類繼承的FontSize屬性。但我無法重寫FontSize屬性,並且似乎沒有我可以訂閱的FontChanged事件。「覆蓋」XAML UserControl上的FontSize屬性

最終,我希望能夠在包含我的用戶控件的頁面的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> 

我怎麼能在頁面設置鍵盤控制的字號,並把它遷移到KeyPad中的KeyPadButton控件?

+0

你能分享你的包含UserControl的XAML嗎? – bit

回答

0

嗯,原來機制已經存在。我只需要從兩個UserControl中刪除FontSize屬性,然後KeyPad和KeyPadButton使用包含頁面中的KeyPad控件的FontSize屬性值,然後將其傳遞到KeyPadButton控件中的文本塊。

(沒關係)

0
<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,它不是由類實例暗示,但沒有它,直接類並自動找到它。

樣式可以被定義不止一次到相同的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個「類」,有或沒有明確的樣式關聯。