fontfamiliesのリストを列挙してコンボボックスにバインドすると、システムに壊れているフォントがあるときに問題が発生します。アプリケーション全体がクラッシュします。どのように私はsystemfontfamiliesにバインドすることができますまだエラーを表示しているフォントをスキップすることができますか?コンボボックスへのバインド時にSystemFontFamiliesエラーが発生する
itemtemplateのfontfamilyバインディングがコメントされている場合、次のコードは正常に動作します。
<ComboBox x:Name="comboFonts"
Grid.IsSharedSizeScope="True"
Grid.Row="0" Grid.Column="1"
ItemsSource="{Binding Source={x:Static Member=Fonts.SystemFontFamilies}}"
SelectedItem="{Binding FontFamily, Mode=TwoWay}"
HorizontalAlignment="Stretch">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="FontName"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Source}" HorizontalAlignment="Left"/>
<Label FontFamily="{Binding FallbackValue=Verdana}" HorizontalAlignment="Right">Sample</Label>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
取得エラーメッセージが助けてください
Message=Input file or data stream does not conform to the expected file format specification.
Source=PresentationCore
StackTrace:
at MS.Internal.Text.TextInterface.Native.Util.ConvertHresultToException(Int32 hr)
at MS.Internal.Text.TextInterface.Font.CreateFontFace()
at MS.Internal.Text.TextInterface.Font.AddFontFaceToCache()
at MS.Internal.Text.TextInterface.Font.GetFontFace()
を以下の通りです。 THanks
しかし、TryGetGlyphTypeface()が有効なフォントファミリ、つまりコンポジットフォントに対して 'null'を返すのは普通ではないことに注意してください。 'null'を返すだけであるから、必ずしもフォントファイルが壊れているとは限りません(もちろん、' GlyphTypeface'自体に頼っているなら、それを得るためには複合体フォント...しかし、それはここの問題の一部ではありません)。 –