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;
+ }
+ }
+}