2013-01-17 34 views
6

Tôi đang cố gắng tìm ra cách đặt FontFamily trong App.xaml của mình theo cách mà tôi có thể áp dụng kiểu dáng đó bất cứ nơi nào tôi cần. Trong ResourceDictionary tôi có thể áp dụng một cái gì đó như:Làm thế nào để lưu trữ FontFamily như một StaticResource?

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

Những gì tôi muốn làm sau đó là một cái gì đó như:

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

Nhưng, điều duy nhất tôi có thể nhận được để làm việc là một phong cách tiềm ẩn, mà yêu cầu một mục tiêu và nhiều khai báo của phông chữ mà tôi muốn sử dụng. Tôi cần để có thể áp dụng phong cách tôi kết thúc với thuộc tính FontFamily của bất kỳ điều khiển nào.

Dưới đây là gần nhất tôi có thể đến hiện nay:

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

thực hiện này không hoạt động trên một cái gì đó giống như bởi vì nó hy vọng MainFont là một fontFamily, không phải là một chuỗi:

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

Làm thế nào nên Tôi xử lý này? Cảm ơn!

+0

Đây là giải pháp có thể xảy ra nếu bạn không tìm thấy câu trả lời phù hợp hơn: sử dụng thuộc tính phụ thuộc đính kèm để đặt 'FontFamily'. Sau đó bạn sẽ nhận được một cái gì đó như: ''. –

+0

Cảm ơn, nhưng điều đó hoàn toàn trái ngược với những gì tôi sẽ làm. Tôi đang cố gắng hợp nhất các phong cách trong một ứng dụng Silverlight rất lớn, vì vậy việc áp dụng các kiểu ở cấp đó sẽ có nghĩa là hàng nghìn lần chỉnh sửa. –

+0

Có lẽ tôi đang thiếu một cái gì đó, nhưng nếu bạn đang có được thiết lập phông chữ như trong ví dụ của bạn ở trên, đó là 'FontFamily =" {StaticResource MainFont} "', sau đó nó sẽ yêu cầu chính xác cùng một số chỉnh sửa. –

Trả lời

11

Không chắc chắn tôi hoàn toàn hiểu chính xác điều này, vì những gì tôi làm là;

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

Nếu bạn đang nói về sau đó áp dụng nó cho nhiều trường hợp mà không phải khai báo cho từng trường hợp thì tôi sẽ làm như thế;

<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

Tôi nghĩ rằng sự nhầm lẫn của tôi nảy sinh từ việc khai báo hàng đầu, điều này cho tôi một cảnh báo về việc không có hàm tạo mặc định cho 'FontFamily ', nhưng dường như nó hoạt động ... –

+0

Không có hàm tạo mặc định? haha, um, cái gì? Dán nó vào đây chúng tôi sẽ giúp bạn sắp xếp. –

+0

Ok, vì vậy ' Wingdings' trong App.xaml của tôi cho tôi một cảnh báo nhỏ nói "Không tìm thấy hàm tạo mặc định", nhưng sau khi xem những gì bạn đăng, tôi đã thử sử dụng nó trên một phong cách, và lo and behold, nó hoạt động. Đi con số, không có ý tưởng tại sao VS2012 là cho tôi những cảnh báo. –

Các vấn đề liên quan