82 lines
2.6 KiB
C#
82 lines
2.6 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Reflection;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Text.RegularExpressions;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using System.Windows;
|
|||
|
|
using System.Windows.Controls;
|
|||
|
|
using System.Windows.Documents;
|
|||
|
|
using System.Windows.Media;
|
|||
|
|
|
|||
|
|
namespace WpfAppTest
|
|||
|
|
{
|
|||
|
|
internal class RebarTextBlock : TextBlock
|
|||
|
|
{
|
|||
|
|
public static readonly DependencyProperty RebarTextProperty =
|
|||
|
|
DependencyProperty.Register(
|
|||
|
|
nameof(RebarText),
|
|||
|
|
typeof(string),
|
|||
|
|
typeof(WpfAppTest.RebarTextBlock),
|
|||
|
|
new PropertyMetadata(string.Empty, OnRebarTextChanged));
|
|||
|
|
|
|||
|
|
public string RebarText
|
|||
|
|
{
|
|||
|
|
get => (string)GetValue(RebarTextProperty);
|
|||
|
|
set => SetValue(RebarTextProperty, value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private static void OnRebarTextChanged(
|
|||
|
|
DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
((WpfAppTest.RebarTextBlock)d).BuildInlines(e.NewValue as string);
|
|||
|
|
}
|
|||
|
|
//{Assembly.GetExecutingAssembly().GetName()}
|
|||
|
|
internal static readonly FontFamily RebarFont = new($"pack://application:,,,/WpfAppTest;component/Fonts/#SJQY");
|
|||
|
|
internal static readonly FontFamily NormalFont = new($"pack://application:,,,/WpfAppTest;component/Fonts/#汉仪粗宋简");
|
|||
|
|
private void BuildInlines(string text)
|
|||
|
|
{
|
|||
|
|
var sjqy = (FontFamily)Application.Current.Resources["SJQY"];
|
|||
|
|
Inlines.Clear();
|
|||
|
|
if (string.IsNullOrEmpty(text)) return;
|
|||
|
|
var regex = new Regex(
|
|||
|
|
@"(?<![A-Za-z])([ABCD])(?=\s*(?:[ØΦ]\d|\d+@\d+))",
|
|||
|
|
RegexOptions.Compiled);
|
|||
|
|
|
|||
|
|
int lastIndex = 0;
|
|||
|
|
|
|||
|
|
foreach (Match match in regex.Matches(text))
|
|||
|
|
{
|
|||
|
|
// 普通文本
|
|||
|
|
if (match.Index > lastIndex)
|
|||
|
|
{
|
|||
|
|
this.Inlines.Add(new Run
|
|||
|
|
{
|
|||
|
|
Text = text.Substring(lastIndex, match.Index - lastIndex),
|
|||
|
|
FontFamily = NormalFont
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 钢筋等级(SJQY)
|
|||
|
|
this.Inlines.Add(new Run
|
|||
|
|
{
|
|||
|
|
Text = match.Value,
|
|||
|
|
FontFamily = sjqy
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
lastIndex = match.Index + match.Length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 尾部普通文本
|
|||
|
|
if (lastIndex < text.Length)
|
|||
|
|
{
|
|||
|
|
this.Inlines.Add(new Run
|
|||
|
|
{
|
|||
|
|
Text = text.Substring(lastIndex),
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|