diff --git a/CommonWPF/Helper.cs b/CommonWPF/Helper.cs new file mode 100644 index 0000000..1649380 --- /dev/null +++ b/CommonWPF/Helper.cs @@ -0,0 +1,80 @@ +/* + * Copyright 2019 faddenSoft + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Windows; +using System.Windows.Media; + +namespace CommonWPF { + /// + /// Miscellaneous helper functions. + /// + public static class Helper { + /// + /// Measures the size of a string when rendered with the specified parameters. Uses + /// the current culture, left-to-right flow, and 1 pixel per DIP. + /// + /// + /// The Graphics.MeasureString approach from WinForms doesn't work in WPF, but we can + /// accomplish the same thing with the FormattedText class. + /// + /// + /// Text to be displayed. + /// Font family for Typeface. + /// Font style for Typeface. + /// Font weight for Typeface. + /// Font stretch for Typeface. + /// Font size. + /// Width and height of rendered text. + public static Size MeasureString(string str, FontFamily fontFamily, FontStyle fontStyle, + FontWeight fontWeight, FontStretch fontStretch, double emSize) { + FormattedText fmt = new FormattedText( + str, + CultureInfo.CurrentCulture, + FlowDirection.LeftToRight, + new Typeface(fontFamily, fontStyle, fontWeight, fontStretch), + emSize, + Brushes.Black, + new NumberSubstitution(), + 1.0); + + return new Size(fmt.Width, fmt.Height); + } + + /// + /// Measures the size of a string when rendered with the specified parameters. Uses + /// the current culture, left-to-right flow, and 1 pixel per DIP. + /// + /// Text to be displayed. + /// Font typeface to use. + /// Font size. + /// Width of rendered text. + public static double MeasureStringWidth(string str, Typeface typeface, double emSize) { + FormattedText fmt = new FormattedText( + str, + CultureInfo.CurrentCulture, + FlowDirection.LeftToRight, + typeface, + emSize, + Brushes.Black, + new NumberSubstitution(), + 1.0); + + return fmt.Width; + } + } +}