2011-01-17 1 views
2

Я добавил несколько пользовательских шрифтов в проект Silverlight. Однако их поведение очень спорадическое. Я использую его в пользовательском элементе управления. Когда я впервые добавляю элемент управления, он отображается в порядке. Когда я перестраиваю, шрифт возвращается к умолчанию. Когда я просматриваю приложение в браузере, он также использует шрифт по умолчанию. Шрифт встроен в качестве ресурса.Silverlight Random Font Bug

Silverlight issue

Вершина сразу после того, я добавил контроль проектировщику, дно приложение в браузере. Я не знаю, что вызывает это. Если вам нужен код для элемента управления, я могу его предоставить.

BorderedTextBlock.xaml

<UserControl x:Class="MindWorX.CustomPropertyReproduction.Controls.BorderedTextBlock" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" Height="100" Width="200"> 

    <Grid x:Name="LayoutRoot"> 
     <Border BorderThickness="1" BorderBrush="Lime"> 
      <TextBlock Name="MainTextBlock" Margin="4" TextWrapping="Wrap" /> 
     </Border> 
    </Grid> 
</UserControl> 

BorderedTextBlock.xaml.cs

using System; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media; 

namespace MindWorX.CustomPropertyReproduction.Controls 
{ 
    public partial class BorderedTextBlock : UserControl 
    { 
     public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(String), typeof(BorderedTextBlock), new PropertyMetadata("TextBlock", new PropertyChangedCallback(OnTextChanged))); 

     private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      BorderedTextBlock sender = (d as BorderedTextBlock); 
      sender.MainTextBlock.Text = (String)e.NewValue; 
     } 

     new public static readonly DependencyProperty FontFamilyProperty = DependencyProperty.Register("FontFamily", typeof(FontFamily), typeof(BorderedTextBlock), new PropertyMetadata(new FontFamily("Portable User Interface"), new PropertyChangedCallback(OnFontFamilyChanged))); 

     private static void OnFontFamilyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      BorderedTextBlock sender = (d as BorderedTextBlock); 
      sender.MainTextBlock.FontFamily = (FontFamily)e.NewValue; 
     } 

     new public static readonly DependencyProperty FontSizeProperty = DependencyProperty.Register("FontSize", typeof(Double), typeof(BorderedTextBlock), new PropertyMetadata(11d, new PropertyChangedCallback(OnFontSizeChanged))); 

     private static void OnFontSizeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      BorderedTextBlock sender = (d as BorderedTextBlock); 
      sender.MainTextBlock.FontSize = (Double)e.NewValue; 
     } 

     public BorderedTextBlock() 
     { 
      InitializeComponent(); 
     } 

     public String Text 
     { 
      get { return (String)GetValue(TextProperty); } 
      set { SetValue(TextProperty, value); } 
     } 

     new public FontFamily FontFamily 
     { 
      get { return (FontFamily)GetValue(FontFamilyProperty); } 
      set { SetValue(FontFamilyProperty, value); } 
     } 

     new public Double FontSize 
     { 
      get { return (Double)GetValue(FontSizeProperty); } 
      set { SetValue(FontSizeProperty, value); } 
     } 
    } 
} 
+0

Если вы можете добавить синтаксис и структуру проекта вы используете с самодельным шрифтом, который помог бы много с пытаясь выяснить, ваш вопрос. –

+0

Это воспроизведение проблемы. Если вы проверите, вы увидите, что он отлично работает с существующими шрифтами. Но не с обычными шрифтами. http://dl.dropbox.com/u/992656/MindWorX.CustomPropertyReproduction.7z –

+0

не может понять, что такое расширение .7z, чтобы вытащить его из Dropbox и посмотреть ваш образец. Не могли бы вы разместить свой код выше, и это поможет нам определить, что может быть проблемой? –

ответ

3

Хорошо, я вижу, что проблема здесь, но я не знаю, как это исправить процедурно.

Проблема заключается в том, что указание специального шрифта FontFamily не имеет значения (то есть оно не будет работать), если вы не квалифицируете его своим именем/путем, как Fonts\mynewfont.ttf#My New Font. Что делает вышеприведенный код, просто говорит «поднимите My New Font», который во время выполнения не понимает, потому что его не найти.

Один из способов обойти это сделать шрифты, необходимые в качестве ресурсов в App.xaml и использовать их таким образом, как: <FontFamily x:Key="YanoneKaffeesatzThin">Fonts\Yanone Kaffeesatz-47.ttf#Yanone Kaffeesatz Thin</FontFamily> , а затем вызвать применение этого семейства из кода: myTxtBox.FontFamily = DirectCast(App.Current.Resources("YanoneKaffeesatzThin"), FontFamily).

Yanone Kaffeesatz Thin это из библиотеки Google Fonts

+0

+1 для примера ресурса xaml. Однако проблема заключается не в присвоении кода, а при использовании конструктора для назначения шрифта. Я сделал еще один настраиваемый элемент управления, где я не только реализовал пользовательский шрифт, но и 4 других связанных с шрифтом поля. После этого кажется, что он работает так, как должен. Я понятия не имею, почему, но похоже, что проблема была решена. –

 Смежные вопросы

  • Нет связанных вопросов^_^