2025-08-20 12:10:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
using System.Windows.Markup;
|
2026-01-02 17:30:30 +08:00
|
|
|
|
using VariaStudio.Assets;
|
2025-08-20 12:10:13 +08:00
|
|
|
|
|
2026-01-02 17:30:30 +08:00
|
|
|
|
namespace VariaStudio.Markup;
|
2025-08-20 12:10:13 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 用于在XAML中方便地使用Material Design图标字体的标记扩展。通过指定符号名称,可以轻松地将图标添加到UI元素中。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <remarks>
|
|
|
|
|
|
/// 使用此扩展时,需要确保已正确引用了Material Design图标字体资源。可以通过设置`FontFamily`属性来应用图标字体。
|
|
|
|
|
|
/// </remarks>
|
|
|
|
|
|
/// <example>
|
|
|
|
|
|
/// <code lang="xml"> <TextBlock Text="{enu:SymbolIcon Symbol=AddBox}" FontFamily="{StaticResource MaterialIconFont}"/>
|
|
|
|
|
|
/// </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; }
|
|
|
|
|
|
}
|
|
|
|
|
|
|