私の目標は、DependencyPropertiesを介してアプリケーションのテキストスタイルを操作することです。テキストのサイズ、フォントファミリ、色などを操作する図を取得しました。そこで、Wordのようなリッチテキストエディタに似たインターフェイスを使用したいと思います。
私はTextStyleVMでこのコードを使用していますhttp://shevaspace.blogspot.com/2006/12/i-have-some-fun-with-formattedtext_14.html
だから私はFontFamilyPropertyとそれのためのゲッターとセッターを持っています:
public static DependencyProperty FontFamilyProperty =
DependencyProperty.Register(
"FontFamily",
typeof(FontFamily),
typeof(OutlinedText),
new FrameworkPropertyMetadata(
SystemFonts.MessageFontFamily,
FrameworkPropertyMetadataOptions.AffectsRender |
FrameworkPropertyMetadataOptions.AffectsMeasure),
new ValidateValueCallback(IsValidFontFamily));
public FontFamily FontFamily
{
get { return (FontFamily)base.GetValue(FontFamilyProperty); }
set { base.SetValue(FontFamilyProperty, value); }
}
次に、操作するダイアグラムのラベルのスタイルを設定するToStyleメソッドがあります。
Style style = new Style();
Binding fontFamilyBinding = new Binding("FontFamily");
fontFamilyBinding.Source = this;
Setter fontFamilySetter = new Setter();
fontFamilySetter.Property = TextBlock.FontFamilyProperty;
fontFamilySetter.Value = fontFamilyBinding;
style.Setters.Add(fontFamilySetter);
return style;
これで、これはTextBoxで機能します。テキストボックスには現在のFontFamilyが表示され、Arialのような新しい有効なFontFamilyをテキストボックスに入力すると、ラベルのFontFamilyが変更されます。
ただし、必要なのはコンボボックスです。このコンボボックスには、SystemFontsが表示され、ラベルに1つのFontFamilyを選択できます。ただし、バインディングは機能していないようです。システムフォントもラベルの現在のフォントも表示されません。コンボボックスは空です。
これは私のxamlです:
<r:RibbonLabel Content="FontFamily" />
<!--these do not work-->
<r:RibbonComboBox SelectedItem="{Binding FontFamily}"/>
<r:RibbonComboBox ItemsSource="{Binding FontFamily}"/>
<!--this works-->
<r:RibbonTextBox Text="{Binding FontFamily}"/>
ここで、ToStyleメソッドでComboBoxに別のセッターを設定する必要があると仮定します。しかし、私には手がかりがありません。多分このような何か:
fontFamilySetter.Property = ComboBox.ItemSource;
ただし、そのプロパティを設定しても、TextBoxは機能します。それで、これは始めるのに間違った場所ですか?また、ToStyleメソッドで使用されるこれらのStyle-、Setter-、Binding-key-wordsの使用に関するドキュメントを誰かに教えてもらえれば幸いです。これは、私が使用している他の誰かのコードだからです。