Моя цель - манипулировать текстовыми стилями моего приложения через DependencyProperties. Я получил диаграмму, на которой тексты должны обрабатываться по размеру, семейству шрифтов, цвету и т. Д. Поэтому я хотел бы использовать интерфейс, похожий на текстовый редактор, такой как Word.
Я использую этот код в моем TextStyleVM http://shevaspace.blogspot.com/2006/12/i-have-some-fun-with-formattedtext_14.html
Итак, у меня есть FontFamilyProperty и Getter and Setter для него:
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, и если я введу в текстовое поле новый действительный FontFamily, такой как Arial, метки FontFamily будут изменены.
Тем не менее, я хотел бы иметь комбинированный список, который отображает системные шрифты и где я могу выбрать одну 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}"/>
Теперь я предполагаю, что мне нужно установить другой Setter для ComboBox в методе ToStyle. Но я понятия не имею, какой. Может быть, что-то вроде этого:
fontFamilySetter.Property = ComboBox.ItemSource;
Однако, если я установлю это свойство, TextBox все еще будет работать. Так с чего начать? Я также был бы признателен, если бы кто-нибудь намекнул мне на некоторую документацию об использовании этих ключевых слов Style-, Setter-, Binding-key, которые используются в методе ToStyle, так как это кто-то другой, с которым я работаю.