Files
ShrlAlgoToolkit/NeoUI/Melskin/Markup/SymbolIconExtension.cs
2026-01-02 17:30:30 +08:00

77 lines
2.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Windows.Markup;
using VariaStudio.Assets;
namespace VariaStudio.Markup;
/// <summary>
/// 用于在XAML中方便地使用Material Design图标字体的标记扩展。通过指定符号名称可以轻松地将图标添加到UI元素中。
/// </summary>
/// <remarks>
/// 使用此扩展时需要确保已正确引用了Material Design图标字体资源。可以通过设置`FontFamily`属性来应用图标字体。
/// </remarks>
/// <example>
/// <code lang="xml"> &lt;TextBlock Text="{enu:SymbolIcon Symbol=AddBox}" FontFamily="{StaticResource MaterialIconFont}"/&gt;
/// </code>
/// </example>
[ContentProperty(nameof(Symbol))]
[MarkupExtensionReturnType(typeof(string))]
public class SymbolIconExtension : MarkupExtension
{
/// <summary>
/// 用于在 XAML 中扩展 Material 符号图标的使用范围,允许直接通过字符串指定图标名称并显示对应的符号。
/// </summary>
public SymbolIconExtension()
{
}
/// <summary>
/// 用于将 Material 符号图标转换为字符串表示形式的标记扩展类。此类主要用于在 XAML 中直接使用 Material 符号。
/// </summary>
public SymbolIconExtension(MaterialSymbol symbol)
{
Symbol = symbol; }
/// <summary>
/// SymbolIconExtension 类用于在 XAML 中通过标记扩展来设置 Material 符号图标。该类允许开发者通过字符串参数指定 Material 符号的名称,然后将其转换为对应的枚举值。
/// </summary>
/// <remarks>
/// 使用时需提供一个有效的 MaterialSymbol 枚举成员名作为构造函数参数。这个扩展可以方便地与 UI 元素结合使用,以动态地设置或绑定图标属性。
/// </remarks>
public SymbolIconExtension(string symbol)
{
Symbol = (MaterialSymbol)Enum.Parse(typeof(MaterialSymbol), symbol); }
/// <inheritdoc />
public override object ProvideValue(IServiceProvider serviceProvider)
{
return ((char)(int)Symbol).ToString();
//SymbolIcon symbolIcon = new(Symbol);
//if (FontSize > 0)
//{
// symbolIcon.FontSize = FontSize;
//}
//return symbolIcon;
}
// public double FontSize { get; set; }
/// <summary>
/// 表示用于图标扩展的符号。此属性允许在XAML中直接指定一个符号来创建相应的图标。
/// </summary>
/// <remarks>
/// 该属性是<see cref="SymbolIconExtension"/>类的核心,通过设置不同的<see cref="MaterialSymbol"/>值,
/// 可以生成不同样式的图标。它支持在XAML标记中使用使得界面设计更加直观和灵活。
/// </remarks>
[ConstructorArgument("symbol")]
public MaterialSymbol Symbol { get; set; }
}