質問

フォントファミリーのコンボボックスの選択された値を設定しようとしています。これには、次の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」などの文字列をその形式に変換する方法をすぐに教えてもらえますか?

役に立ちましたか?

解決

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

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

FontFamily(String familyName);

したがって、ようなものを使用できるはずです new FontFamily("Arial") 文字列からフォントファミリーに変換します。

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

FontfamilyからStringに到達するには、FamilyNamesプロパティにアクセスして、特定の文化に固有のフォントの名前を取得できます。

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

他のヒント

アレックスの答えはとてもいいですね。

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)
            );

次に、単にバインドします selectedItem あなたの コンボボックス そしてその テキストとフォントファミリー あなたの TextBlock 「fontfamily」へ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top