Files
luban_ui_internal/src/LubanHub.App/MainWindow.axaml.cs
jackqqq123 cc0fa3576d feta: 新增知识库管理:
- Core新增Git项目管理,支持代理
- Knowledge新增知识库来源配置
2025-09-24 15:38:50 +08:00

214 lines
6.8 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 Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Controls.Selection;
using LubanHub.App.Services;
using LubanHub.App.ViewModels;
using Microsoft.Extensions.DependencyInjection;
using LubanHub.Core.Interfaces;
using System;
namespace LubanHub.App;
public partial class MainWindow : Window
{
private Panel? _contentPanel;
private StackPanel? _welcomePanel;
private Grid? _knowledgePanel;
private Grid? _knowledgeManagePanel;
private Grid? _projectPanel;
private Grid? _installPanel;
private Grid? _settingsPanel;
private Button? _knowledgeButton;
private Button? _knowledgeManageButton;
private Button? _projectButton;
private Button? _installButton;
private Button? _settingsButton;
private ComboBox? _themeComboBox;
private TextBox? _downloadDirectoryTextBox;
private MainWindowViewModel? _viewModel;
public MainWindow()
{
InitializeComponent();
InitializeComponents();
InitializeViewModel();
// 订阅主题变化事件
ThemeManager.ThemeChanged += OnThemeChanged;
// 初始化主题
ThemeManager.Initialize();
UpdateThemeComboBox();
}
private void InitializeViewModel()
{
try
{
_viewModel = new MainWindowViewModel();
DataContext = _viewModel;
// 更新下载目录文本框
UpdateDownloadDirectoryTextBox();
}
catch (Exception ex)
{
// 如果ViewModel初始化失败记录错误但不中断应用启动
Console.WriteLine($"初始化ViewModel时出错: {ex.Message}");
}
}
private void UpdateDownloadDirectoryTextBox()
{
if (_downloadDirectoryTextBox != null && _viewModel != null)
{
_downloadDirectoryTextBox.Text = _viewModel.DownloadDirectory;
}
}
private void InitializeComponents()
{
// 获取面板引用
_contentPanel = this.FindControl<Panel>("ContentPanel");
_welcomePanel = this.FindControl<StackPanel>("WelcomePanel");
_knowledgePanel = this.FindControl<Grid>("KnowledgePanel");
_knowledgeManagePanel = this.FindControl<Grid>("KnowledgeManagePanel");
_projectPanel = this.FindControl<Grid>("ProjectPanel");
_installPanel = this.FindControl<Grid>("InstallPanel");
_settingsPanel = this.FindControl<Grid>("SettingsPanel");
// 获取按钮引用
_knowledgeButton = this.FindControl<Button>("KnowledgeButton");
_knowledgeManageButton = this.FindControl<Button>("KnowledgeManageButton");
_projectButton = this.FindControl<Button>("ProjectButton");
_installButton = this.FindControl<Button>("InstallButton");
_settingsButton = this.FindControl<Button>("SettingsButton");
// 获取其他控件引用
_themeComboBox = this.FindControl<ComboBox>("ThemeComboBox");
_downloadDirectoryTextBox = this.FindControl<TextBox>("DownloadDirectoryTextBox");
}
private void ShowPanel(Grid? targetPanel)
{
// 隐藏所有面板
if (_welcomePanel != null) _welcomePanel.IsVisible = false;
if (_knowledgePanel != null) _knowledgePanel.IsVisible = false;
if (_knowledgeManagePanel != null) _knowledgeManagePanel.IsVisible = false;
if (_projectPanel != null) _projectPanel.IsVisible = false;
if (_installPanel != null) _installPanel.IsVisible = false;
if (_settingsPanel != null) _settingsPanel.IsVisible = false;
// 显示目标面板
if (targetPanel != null)
{
targetPanel.IsVisible = true;
}
// 更新按钮样式
UpdateButtonStyles();
}
private void UpdateButtonStyles()
{
// 移除所有按钮的选中样式
_knowledgeButton?.Classes.Remove("selected");
_knowledgeManageButton?.Classes.Remove("selected");
_projectButton?.Classes.Remove("selected");
_installButton?.Classes.Remove("selected");
_settingsButton?.Classes.Remove("selected");
// 根据当前显示的面板添加选中样式
if (_knowledgePanel?.IsVisible == true)
_knowledgeButton?.Classes.Add("selected");
else if (_knowledgeManagePanel?.IsVisible == true)
_knowledgeManageButton?.Classes.Add("selected");
else if (_projectPanel?.IsVisible == true)
_projectButton?.Classes.Add("selected");
else if (_installPanel?.IsVisible == true)
_installButton?.Classes.Add("selected");
else if (_settingsPanel?.IsVisible == true)
_settingsButton?.Classes.Add("selected");
}
private void OnKnowledgeButtonClick(object? sender, RoutedEventArgs e)
{
ShowPanel(_knowledgePanel);
}
private void OnKnowledgeManageButtonClick(object? sender, RoutedEventArgs e)
{
ShowPanel(_knowledgeManagePanel);
}
private void OnProjectButtonClick(object? sender, RoutedEventArgs e)
{
ShowPanel(_projectPanel);
}
private void OnInstallButtonClick(object? sender, RoutedEventArgs e)
{
ShowPanel(_installPanel);
}
private void OnSettingsButtonClick(object? sender, RoutedEventArgs e)
{
ShowPanel(_settingsPanel);
}
private void OnThemeComboBoxSelectionChanged(object? sender, SelectionChangedEventArgs e)
{
if (_themeComboBox?.SelectedIndex != null)
{
var newTheme = _themeComboBox.SelectedIndex == 0 ? ThemeVariant.Dark : ThemeVariant.Light;
ThemeManager.SetTheme(newTheme);
}
}
private void OnThemeChanged(ThemeVariant theme)
{
UpdateThemeComboBox();
}
private void UpdateThemeComboBox()
{
if (_themeComboBox != null)
{
_themeComboBox.SelectedIndex = ThemeManager.CurrentTheme == ThemeVariant.Dark ? 0 : 1;
}
}
private void OnBrowseDownloadDirectoryClick(object? sender, RoutedEventArgs e)
{
try
{
// 简单的目录选择实现,实际项目中应该使用文件对话框
if (_viewModel != null)
{
_viewModel.ChangeDownloadDirectoryCommand.Execute(null);
UpdateDownloadDirectoryTextBox();
}
}
catch (Exception ex)
{
Console.WriteLine($"浏览下载目录时出错: {ex.Message}");
}
}
private void OnTestModuleDownloadClick(object? sender, RoutedEventArgs e)
{
try
{
if (_viewModel != null)
{
_viewModel.TestModuleDownloadCommand.Execute(null);
}
}
catch (Exception ex)
{
Console.WriteLine($"测试模块下载时出错: {ex.Message}");
}
}
}