2013-01-17 11 views
6

Próbuję dowiedzieć się, jak ustawić FontFamily w moim App.xaml w taki sposób, że mogę deklaratywnie zastosować ten styl, gdziekolwiek trzeba. W ResourceDictionary mogę zastosować coś takiego:Jak przechowywać FontFamily jako StaticResource?

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

Co chcę zrobić wtedy jest coś takiego jak:

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

ale jedyne co mogę dostać się do pracy jest niejawny stylu, który wymaga celu i wielu deklaracji czcionki, której chcę użyć. Muszę umieć zastosować styl, w którym się znajduję, do właściwości FontFamily dowolnej kontroli.

Oto najbliżej mogę przyjść obecnie:

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

Implementacja ta nie działa na coś takiego, ponieważ oczekuje MainFont być FontFamily, a nie ciąg:

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

Jak powinien Zajmuję się tym? Dzięki!

+0

Oto możliwe rozwiązanie, jeśli nie znajdziesz bardziej odpowiedniej odpowiedzi: użyj dołączonej właściwości zależności, aby ustawić "FontFamily". Otrzymasz wtedy coś takiego: ''. –

+0

Dzięki, ale to jest dokładne przeciwieństwo tego, po co idę. Próbuję skonsolidować style w bardzo dużej aplikacji Silverlight, więc zastosowanie stylów na tym poziomie oznaczałoby tysiące zmian. –

+0

Może brakuje mi czegoś, ale jeśli zamierzasz ustawić czcionki jak w powyższym przykładzie, to jest 'FontFamily =" {StaticResource MainFont} "', to będzie wymagało dokładnie takiej samej liczby zmian. –

Odpowiedz

11

Nie jestem pewien, czy całkowicie to rozumiem, ponieważ to, co robię;

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

Jeśli mówisz o zastosowaniu go do wielu instancji bez konieczności zadeklarowania go każdemu, to po prostu lubię;

<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

Myślę, że moje zamieszanie wynika z górnej deklaracji, co daje mi ostrzeżenie o tym, że nie ma domyślnego konstruktora dla 'FontFamily ', ale najwyraźniej to działa ... –

+0

Brak domyślnego konstruktora? haha, um, co? Wklej to tutaj, abyśmy cię załatwili. –

+0

OK, więc ' Wingdings' w moim App.xaml daje mi małe ostrzeżenie z napisem "Nie znaleziono domyślnego konstruktora", ale po zobaczeniu tego, co napisałeś, próbowałem użyć go na styl, a oto i zadziałało. Idź, nie wiem, dlaczego VS2012 ostrzega mnie. –