2013-01-17 20 views
6

我想弄清楚如何在我的App.xaml中設置FontFamily,以便我可以在需要時聲明性地應用該樣式。 在ResourceDictionary我可以申請類似:如何將FontFamily存儲爲StaticResource?

<System:Double x:Key="SmallTextSize">10</System:Double> 

我想要做的就是這樣的:

<FontFamily x:Key="MainFont">Wingdings</FontFamily> 

但是,我可以得到工作的唯一的東西是一個隱含的風格,需要一個目標,以及我想要使用的多個字體聲明。我需要能夠將我最終的樣式應用於任何控件的FontFamily屬性。

這裏是最接近我可以來目前:

<TextBlock Text="{Binding}" Margin="0,0,0,4" FontWeight="Normal" FontFamily="{StaticResource MainFont}" FontSize="14.667" /> 

應該如何:

<System:String x:Key="MainFont">Wingdings</System:String> 
<Style TargetType="UserControl"> 
     <Setter Property="FontFamily" Value="{StaticResource MainFont}"></Setter> 
</Style> 

此實現不上類似,因爲它預計MainFont是一個的FontFamily,而不是字符串工作我處理這個?謝謝!

+0

這裏的,如果你沒有找到更合適的答案可能的解決方法:使用外接依賴屬性設置'FontFamily'。然後你會得到這樣的東西:''。 –

+0

謝謝,但這與我的目標完全相反。我試圖在非常大的Silverlight應用程序中整合樣式,因此在該級別應用樣式意味着成千上萬的編輯。 –

+0

也許我錯過了一些東西,但是如果你要設置字體,就像上面的例子那樣,那就是'FontFamily =「{StaticResource MainFont}」',那麼它將需要完全相同數量的編輯。 –

回答

11

不知道我完全理解這一個,因爲我所做的是;

<FontFamily x:Key="MainFont">WingDings</FontFamily> 

如果你在談論,然後將其應用到多個實例,而無需將其申報到每個人,然後我只想做喜歡的;

<Object> 
    <Object.Resources> 
     <Style TargetType="TextBlock" BasedOn="{StaticResource YourDefaultTextBlockStyleToInheritOtherProperties}"> 
     <Setter Property="FontFamily" Value="{StaticResource MainFont}"/> 
     </Style> 
    </Object.Resources> 

    <!-- Your FontFamily automatically gets inherited to all children of the object 
     whether your object is say a Grid, or StackPanel, 
     or even an entire UserControl -->  
    <TextBlock Text="ABCDEFG"/> 
    <TextBlock Text="12345"/> 
    <TextBlock Text="!()*&@#"/> 

</Object> 
+0

我認爲我的困惑來自頂部聲明,它給了我一個關於'FontFamily'沒有默認構造函數的警告,但顯然這確實有效...... –

+0

沒有默認構造函數?哈哈,呃,什麼?將它粘貼在這裏我們會讓你整理出來。 –

+0

好的,所以在我的App.xaml中Wingdings''給了我一點警告,說「找不到默認的構造函數」,但是在看到你發佈的內容之後,我試着在它上面使用它風格,你看,它的工作。去圖,不知道爲什麼VS2012給我警告。 –