Files
community/Ink Canvas/Windows/SettingsViews/Pages/PluginPage.xaml.cs
T
PrefacedCorg 84b626d344 add:插件
屎山
2026-04-10 01:24:57 +08:00

121 lines
3.8 KiB
C#

using Ink_Canvas.Plugins;
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class PluginPage : iNKORE.UI.WPF.Modern.Controls.Page
{
public PluginPage()
{
InitializeComponent();
Loaded += PluginPage_Loaded;
}
private void PluginPage_Loaded(object sender, RoutedEventArgs e)
{
LoadPlugins();
}
public void LoadPlugins()
{
try
{
var pluginManager = PluginManager.Instance;
var plugins = pluginManager.Plugins;
PluginCountText.Text = string.Format("已加载 {0} 个插件", plugins.Count);
if (plugins.Count == 0)
{
PluginContainer.Children.Clear();
var noPluginText = new TextBlock
{
Text = "没有找到插件,请将插件文件放置在 Plugins 目录中",
TextWrapping = TextWrapping.Wrap,
Foreground = Brushes.Gray,
Margin = new Thickness(0, 10, 0, 0)
};
PluginContainer.Children.Add(noPluginText);
return;
}
PluginContainer.Children.Clear();
foreach (var pluginInfo in plugins)
{
var pluginCard = CreatePluginCard(pluginInfo);
PluginContainer.Children.Add(pluginCard);
}
}
catch (Exception ex)
{
PluginCountText.Text = string.Format("加载插件时出错:{0}", ex.Message);
}
}
private Border CreatePluginCard(PluginInfo pluginInfo)
{
var card = new Border
{
Background = Brushes.White,
BorderBrush = Brushes.LightGray,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(8),
Margin = new Thickness(0, 0, 0, 10),
Padding = new Thickness(15)
};
var stackPanel = new StackPanel();
var titlePanel = new DockPanel { LastChildFill = true };
var nameText = new TextBlock
{
Text = pluginInfo.Name,
FontSize = 16,
FontWeight = FontWeights.Bold,
Foreground = Brushes.Black,
Margin = new Thickness(0, 0, 10, 0)
};
DockPanel.SetDock(nameText, Dock.Left);
var versionText = new TextBlock
{
Text = string.Format("v{0}", pluginInfo.Version),
FontSize = 12,
Foreground = Brushes.Gray,
VerticalAlignment = VerticalAlignment.Center
};
titlePanel.Children.Add(nameText);
titlePanel.Children.Add(versionText);
var descriptionText = new TextBlock
{
Text = pluginInfo.Description,
FontSize = 12,
Foreground = Brushes.DarkGray,
TextWrapping = TextWrapping.Wrap,
Margin = new Thickness(0, 5, 0, 5)
};
var authorText = new TextBlock
{
Text = string.Format("作者:{0}", pluginInfo.Author),
FontSize = 11,
Foreground = Brushes.Gray
};
stackPanel.Children.Add(titlePanel);
stackPanel.Children.Add(descriptionText);
stackPanel.Children.Add(authorText);
card.Child = stackPanel;
return card;
}
}
}