Files
avaloniaForm/AvaloniaLinuxForm/Views/MainView.axaml.cs
2025-09-30 14:35:09 +08:00

89 lines
2.3 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.VisualTree;
using AvaloniaLinuxForm.ViewModels;
using AvaloniaWebView;
using System;
namespace AvaloniaLinuxForm.Views;
public partial class MainView : UserControl
{
private WebView _webView;
private Button _backButton;
private Button _forwardButton;
private Button _refreshButton;
private Button _settingbButton;
public MainView()
{
InitializeComponent();
_backButton = this.FindControl<Button>("backButton");
_backButton.Click += BackButton_OnClick;
_forwardButton = this.FindControl<Button>("forwardButton");
_forwardButton.Click += ForwardButton_OnClick;
_refreshButton = this.FindControl<Button>("refreshButton");
_refreshButton.Click += RefreshButton_OnClick;
_settingbButton = this.FindControl<Button>("settingButton");
_settingbButton.Click += async (_, __) =>
{
var settingWindow = new SettingWindow();
// 找到 MainView 所在的 Window作为 owner
var parentWindow = this.FindAncestorOfType<Window>();
// 弹窗并等待结果
var result = await settingWindow.ShowDialog<string>(parentWindow);
if (!string.IsNullOrEmpty(result))
{
LoadUrl(result);
}
};
_webView = this.FindControl<WebView>("webView");
string url = SQLiteUtil.LoadUrl();
LoadUrl(url);
_webView.NavigationCompleted += (s, e) =>
{
var vm = this.DataContext as MainViewModel;
if (vm != null)
{
vm.CanGoBack = _webView.IsCanGoBack;
vm.CanGoForward = _webView.IsCanGoForward;
}
};
}
public void BackButton_OnClick(object sender, Avalonia.Interactivity.RoutedEventArgs e)
{
_webView.GoBack();
}
public void ForwardButton_OnClick(object sender, Avalonia.Interactivity.RoutedEventArgs e)
{
_webView.GoForward();
}
public void RefreshButton_OnClick(object sender, Avalonia.Interactivity.RoutedEventArgs e)
{
_webView.Reload();
}
private void LoadUrl(string url)
{
if (Uri.TryCreate(url, UriKind.Absolute, out var uri))
{
_webView.Url = uri;
}
}
}