using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Windows; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; namespace AIStudio.Wpf.DiagramDesigner { public class FontViewModel : BindableBase, IFontViewModel { #region 界面使用 static FontViewModel() { var systemFontFamilies = new List(); foreach (FontFamily _f in Fonts.SystemFontFamilies) { LanguageSpecificStringDictionary _fontDic = _f.FamilyNames; if (_fontDic.ContainsKey(XmlLanguage.GetLanguage("zh-cn"))) { string _fontName = null; if (_fontDic.TryGetValue(XmlLanguage.GetLanguage("zh-cn"), out _fontName)) { systemFontFamilies.Add(new FontFamily(_fontName)); } } else { string _fontName = null; if (_fontDic.TryGetValue(XmlLanguage.GetLanguage("en-us"), out _fontName)) { systemFontFamilies.Add(new FontFamily(_fontName)); } } } FontFamilys = systemFontFamilies.Select(fontFamily => fontFamily.ToString()).ToArray(); } public static string[] FontFamilys { get; } public static double[] FontSizes { get; } = new double[] { 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36, 48, 72 }; public static FontCase[] FontCases { get; } = new FontCase[] { FontCase.None, FontCase.Upper, FontCase.Lower }; public static Color[] FontColors { get; } = new Color[] { Colors.Red, Colors.Green, Colors.Blue, Colors.White, Colors.Black, Colors.Purple }; public ICommand GrowFontCommand { get { return new SimpleCommand(para => { if (FontSize < 72) FontSize++; }); } } public ICommand ShrinkFontCommand { get { return new SimpleCommand(para => { if (FontSize > 1) FontSize--; }); } } public ICommand ClearFormattingCommand { get { return new SimpleCommand(para => { FontFamily = "Arial"; FontSize = 12; FontColor = Colors.Black; FontWeight = FontWeights.Regular; FontStyle = FontStyles.Normal; FontStretch = FontStretches.Normal; Underline = false; Strikethrough = false; OverLine = false; TextEffectColor = Colors.Transparent; HighlightColor = Colors.Transparent; FontCase = FontCase.None; HorizontalAlignment = HorizontalAlignment.Center; VerticalAlignment = VerticalAlignment.Center; LineHeight = Double.NaN; }); } } public ICommand TextEffectColorCommand { get { return new SimpleCommand(para => { TextEffectColor = (Color)para; }); } } public ICommand HighlightColorCommand { get { return new SimpleCommand(para => { HighlightColor = (Color)para; }); } } public ICommand FontColorCommand { get { return new SimpleCommand(para => { FontColor = (Color)para; }); } } private HorizontalVerticalAlignment _horizontalVerticalAlignment = HorizontalVerticalAlignment.CenterAlignCenter; public HorizontalVerticalAlignment HorizontalVerticalAlignment { get { return _horizontalVerticalAlignment; } set { if (SetProperty(ref _horizontalVerticalAlignment, value)) { _horizontalVerticalAlignment = value; switch (value) { case HorizontalVerticalAlignment.TopAlignLeft: HorizontalAlignment = HorizontalAlignment.Left; VerticalAlignment = VerticalAlignment.Top; break; case HorizontalVerticalAlignment.TopAlignCenter: HorizontalAlignment = HorizontalAlignment.Center; VerticalAlignment = VerticalAlignment.Top; break; case HorizontalVerticalAlignment.TopAlignRight: HorizontalAlignment = HorizontalAlignment.Right; VerticalAlignment = VerticalAlignment.Top; break; case HorizontalVerticalAlignment.TopAlignJustify: HorizontalAlignment = HorizontalAlignment.Stretch; VerticalAlignment = VerticalAlignment.Top; break; case HorizontalVerticalAlignment.CenterAlignLeft: HorizontalAlignment = HorizontalAlignment.Left; VerticalAlignment = VerticalAlignment.Center; break; case HorizontalVerticalAlignment.CenterAlignCenter: HorizontalAlignment = HorizontalAlignment.Center; VerticalAlignment = VerticalAlignment.Center; break; case HorizontalVerticalAlignment.CenterAlignRight: HorizontalAlignment = HorizontalAlignment.Right; VerticalAlignment = VerticalAlignment.Center; break; case HorizontalVerticalAlignment.CenterAlignJustify: HorizontalAlignment = HorizontalAlignment.Stretch; VerticalAlignment = VerticalAlignment.Center; break; case HorizontalVerticalAlignment.BottomAlignLeft: HorizontalAlignment = HorizontalAlignment.Left; VerticalAlignment = VerticalAlignment.Bottom; break; case HorizontalVerticalAlignment.BottomAlignCenter: HorizontalAlignment = HorizontalAlignment.Center; VerticalAlignment = VerticalAlignment.Bottom; break; case HorizontalVerticalAlignment.BottomAlignRight: HorizontalAlignment = HorizontalAlignment.Right; VerticalAlignment = VerticalAlignment.Bottom; break; case HorizontalVerticalAlignment.BottomAlignJustify: HorizontalAlignment = HorizontalAlignment.Stretch; VerticalAlignment = VerticalAlignment.Bottom; break; } } } } #endregion private string _fontFamily = "Arial"; [CanDo] public string FontFamily { get { return _fontFamily; } set { if (!SetProperty(ref _fontFamily, value)) { RaisePropertyChanged(nameof(FontFamily)); } } } private double _fontSize = 12; [CanDo] public double FontSize { get { return _fontSize; } set { if (!SetProperty(ref _fontSize, value)) { RaisePropertyChanged(nameof(FontSize)); } } } private Color _fontColor = Colors.Black; [CanDo] public Color FontColor { get { return _fontColor; } set { if (!SetProperty(ref _fontColor, value)) { RaisePropertyChanged(nameof(FontColor)); } } } private FontWeight _fontWeight = FontWeights.Regular; [CanDo] public FontWeight FontWeight { get { return _fontWeight; } set { if (!SetProperty(ref _fontWeight, value)) { RaisePropertyChanged(nameof(FontWeight)); } } } private FontStyle _fontStyle = FontStyles.Normal; [CanDo] public FontStyle FontStyle { get { return _fontStyle; } set { if (!SetProperty(ref _fontStyle, value)) { RaisePropertyChanged(nameof(FontStyle)); } } } private FontStretch _fontStretch = FontStretches.Normal; [CanDo] public FontStretch FontStretch { get { return _fontStretch; } set { if (!SetProperty(ref _fontStretch, value)) { RaisePropertyChanged(nameof(FontStretch)); } } } private bool _underline; [CanDo] public bool Underline { get { return _underline; } set { if (SetProperty(ref _underline, value)) { RaisePropertyChanged(nameof(TextDecorations)); } else { RaisePropertyChanged(nameof(Underline)); } } } private bool _strikethrough; [CanDo] public bool Strikethrough { get { return _strikethrough; } set { if (SetProperty(ref _strikethrough, value)) { RaisePropertyChanged(nameof(TextDecorations)); } else { RaisePropertyChanged(nameof(Strikethrough)); } } } private bool _overLine; [CanDo] public bool OverLine { get { return _overLine; } set { if (SetProperty(ref _overLine, value)) { RaisePropertyChanged(nameof(TextDecorations)); } else { RaisePropertyChanged(nameof(OverLine)); } } } private TextDecorationCollection _textDecorations; public TextDecorationCollection TextDecorations { get { _textDecorations = new TextDecorationCollection(); if (Underline) { _textDecorations.Add(System.Windows.TextDecorations.Underline); } if (Strikethrough) { _textDecorations.Add(System.Windows.TextDecorations.Strikethrough); } if (OverLine) { _textDecorations.Add(System.Windows.TextDecorations.OverLine); } return _textDecorations; } //set //{ // NotifyChanged(nameof(TextDecorations)); //} } private Color _textEffectColor = Colors.Transparent; [CanDo] public Color TextEffectColor { get { return _textEffectColor; } set { if (!SetProperty(ref _textEffectColor, value)) { RaisePropertyChanged(nameof(TextEffectColor)); } } } private Color _highlightColor = Colors.Transparent; [CanDo] public Color HighlightColor { get { return _highlightColor; } set { if (!SetProperty(ref _highlightColor, value)) { RaisePropertyChanged(nameof(HighlightColor)); } } } private FontCase _fontCase = FontCase.None; [CanDo] public FontCase FontCase { get { return _fontCase; } set { if (!SetProperty(ref _fontCase, value)) { RaisePropertyChanged(nameof(FontCase)); } } } private HorizontalAlignment _horizontalAlignment = HorizontalAlignment.Center; [CanDo] public HorizontalAlignment HorizontalAlignment { get { return _horizontalAlignment; } set { if (!SetProperty(ref _horizontalAlignment, value)) { RaisePropertyChanged(nameof(HorizontalAlignment)); } } } private VerticalAlignment _verticalAlignment = VerticalAlignment.Center; [CanDo] public VerticalAlignment VerticalAlignment { get { return _verticalAlignment; } set { if (!SetProperty(ref _verticalAlignment, value)) { RaisePropertyChanged(nameof(VerticalAlignment)); } } } private double _lineHeight = Double.NaN; [CanDo] public double LineHeight { get { return _lineHeight; } set { if (!SetProperty(ref _lineHeight, value)) { RaisePropertyChanged(nameof(LineHeight)); } } } } }