3

次の XAML が入力されているフォント ファミリ コンボボックスの選択した値を設定しようとしています。

<ComboBox ItemsSource="{x:Static Fonts.SystemFontFamilies}" Name="cboFont">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel MinWidth="256" />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Margin="2" Text="{Binding}" FontFamily="{Binding}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

コンボボックスを設定する必要があるフィールドは文字列ですが、それによって FormatExceptions が発生します。コンボボックスが期待するクラスと、「Arial」などの文字列をその形式に変換する方法をすぐに教えてもらえますか?

4

2 に答える 2

7

あなたの質問を正しく理解できたことを願っています。

FontFamily はコンストラクターをサポートします

FontFamily(String familyName);

new FontFamily("Arial")したがって、文字列から FontFamily に変換するようなものを使用できるはずです。

IValueConverterFontFamily と String の間の変換を実装するクラスにそれを置くことができます。

FontFamily から文字列を取得するには、FamilyNames プロパティにアクセスして、特定のカルチャに固有のフォントの名前を取得できます。

次に、コンバーターを使用するように FontFamily バインディングを設定します。

于 2010-08-10T17:01:51.110 に答える
1

アレックスの答えはとても良さそうです。

DependencyProperty を試すこともできます。

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

 public static DependencyProperty FontFamilyProperty =
            DependencyProperty.Register(
            "FontFamily",
            typeof(FontFamily),
            typeof(YourClassVM),
             new FrameworkPropertyMetadata(SystemFonts.MessageFontFamily
        , FrameworkPropertyMetadataOptions.AffectsRender |
        FrameworkPropertyMetadataOptions.AffectsMeasure)
            );

次に、ComboboxのSelectedItemと、TextBlockText および FontFamilyを「FontFamily」にバインドするだけです。

于 2010-08-11T07:54:30.933 に答える