mirror of
https://github.com/yaobiao131/downkyicore.git
synced 2025-08-10 00:52:31 +00:00
fix: 优化dialog样式和修复dialog的相关bug
This commit is contained in:
@@ -10,7 +10,7 @@ using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.Threading;
|
||||
using DownKyi.Core.Settings;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Services.Download;
|
||||
using DownKyi.ViewModels;
|
||||
using DownKyi.ViewModels.Dialogs;
|
||||
@@ -61,6 +61,7 @@ public partial class App : PrismApplication
|
||||
protected override void RegisterTypes(IContainerRegistry containerRegistry)
|
||||
{
|
||||
containerRegistry.RegisterSingleton<IDialogService, DialogService>();
|
||||
containerRegistry.Register<IDialogWindow, DialogWindow>();
|
||||
// pages
|
||||
containerRegistry.RegisterForNavigation<ViewIndex>(ViewIndexViewModel.Tag);
|
||||
containerRegistry.RegisterForNavigation<ViewLogin>(ViewLoginViewModel.Tag);
|
||||
@@ -105,8 +106,7 @@ public partial class App : PrismApplication
|
||||
// UserSpace
|
||||
containerRegistry.RegisterForNavigation<ViewArchive>(ViewArchiveViewModel.Tag);
|
||||
// containerRegistry.RegisterForNavigation<Views.UserSpace.ViewChannel>(ViewModels.UserSpace.ViewChannelViewModel.Tag);
|
||||
containerRegistry.RegisterForNavigation<Views.UserSpace.ViewSeasonsSeries>(ViewModels.UserSpace
|
||||
.ViewSeasonsSeriesViewModel.Tag);
|
||||
containerRegistry.RegisterForNavigation<Views.UserSpace.ViewSeasonsSeries>(ViewModels.UserSpace.ViewSeasonsSeriesViewModel.Tag);
|
||||
|
||||
// dialogs
|
||||
containerRegistry.RegisterDialog<ViewAlertDialog>(ViewAlertDialogViewModel.Tag);
|
||||
|
||||
@@ -35,4 +35,12 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DownKyi.Core\DownKyi.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="PrismExtension\Dialog\DialogWindow.axaml.cs">
|
||||
<DependentUpon>DialogWindow.axaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
77
DownKyi/PrismExtension/Common/MvvmHelpers.cs
Normal file
77
DownKyi/PrismExtension/Common/MvvmHelpers.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using Avalonia.Controls;
|
||||
using Prism.Mvvm;
|
||||
|
||||
namespace DownKyi.PrismExtension.Common;
|
||||
|
||||
/// <summary>
|
||||
/// Helper class for MVVM.
|
||||
/// </summary>
|
||||
public static class MvvmHelpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Sets the AutoWireViewModel property to true for the <paramref name="viewOrViewModel"/>.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The AutoWireViewModel property will only be set to true if the view
|
||||
/// is a <see cref="FrameworkElement"/>, the DataContext of the view is null, and
|
||||
/// the AutoWireViewModel property of the view is null.
|
||||
/// </remarks>
|
||||
/// <param name="viewOrViewModel">The View or ViewModel.</param>
|
||||
internal static void AutowireViewModel(object viewOrViewModel)
|
||||
{
|
||||
if (viewOrViewModel is Control view &&
|
||||
view.DataContext is null &&
|
||||
ViewModelLocator.GetAutoWireViewModel(view) is null)
|
||||
{
|
||||
ViewModelLocator.SetAutoWireViewModel(view, true);
|
||||
}
|
||||
}
|
||||
|
||||
////#endif
|
||||
|
||||
/// <summary>
|
||||
/// Perform an <see cref="Action"/> on a view and viewmodel.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The action will be performed on the view and its viewmodel if they implement <typeparamref name="T"/>.
|
||||
/// </remarks>
|
||||
/// <typeparam name="T">The <see cref="Action{T}"/> parameter type.</typeparam>
|
||||
/// <param name="view">The view to perform the <see cref="Action{T}"/> on.</param>
|
||||
/// <param name="action">The <see cref="Action{T}"/> to perform.</param>
|
||||
public static void ViewAndViewModelAction<T>(object view, Action<T> action) where T : class
|
||||
{
|
||||
if (view is T viewAsT)
|
||||
action(viewAsT);
|
||||
|
||||
if (view is Control element && element.DataContext is T viewModelAsT)
|
||||
{
|
||||
action(viewModelAsT);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get an implementer from a view or viewmodel.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If the view implements <typeparamref name="T"/> it will be returned.
|
||||
/// Otherwise if the view's <see cref="FrameworkElement.DataContext"/> implements <typeparamref name="T"/> it will be returned instead.
|
||||
/// </remarks>
|
||||
/// <typeparam name="T">The implementer type to get.</typeparam>
|
||||
/// <param name="view">The view to get <typeparamref name="T"/> from.</param>
|
||||
/// <returns>view or viewmodel as <typeparamref name="T"/>.</returns>
|
||||
public static T GetImplementerFromViewOrViewModel<T>(object view) where T : class
|
||||
{
|
||||
if (view is T viewAsT)
|
||||
{
|
||||
return viewAsT;
|
||||
}
|
||||
|
||||
if (view is Control element && element.DataContext is T vmAsT)
|
||||
{
|
||||
return vmAsT;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
30
DownKyi/PrismExtension/Dialog/Dialog.cs
Normal file
30
DownKyi/PrismExtension/Dialog/Dialog.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Styling;
|
||||
|
||||
namespace DownKyi.PrismExtension.Dialog;
|
||||
|
||||
public class Dialog : Prism.Services.Dialogs.Dialog
|
||||
{
|
||||
public static readonly AvaloniaProperty ThemeProperty =
|
||||
AvaloniaProperty.RegisterAttached<AvaloniaObject, ControlTheme>("Theme", typeof(Dialog));
|
||||
|
||||
/// <summary>
|
||||
/// Gets the value for the <see cref="ThemeProperty"/> attached property.
|
||||
/// </summary>
|
||||
/// <param name="obj">The target element.</param>
|
||||
/// <returns>The <see cref="ThemeProperty"/> attached to the <paramref name="obj"/> element.</returns>
|
||||
public static ControlTheme? GetTheme(AvaloniaObject obj)
|
||||
{
|
||||
return (ControlTheme?)obj.GetValue(ThemeProperty);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the <see cref="ThemeProperty"/> attached property.
|
||||
/// </summary>
|
||||
/// <param name="obj">The target element.</param>
|
||||
/// <param name="value">The Style to attach.</param>
|
||||
public static void SetTheme(AvaloniaObject obj, ControlTheme value)
|
||||
{
|
||||
obj.SetValue(ThemeProperty, value);
|
||||
}
|
||||
}
|
||||
124
DownKyi/PrismExtension/Dialog/DialogService.cs
Normal file
124
DownKyi/PrismExtension/Dialog/DialogService.cs
Normal file
@@ -0,0 +1,124 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using DownKyi.PrismExtension.Common;
|
||||
using Prism.Ioc;
|
||||
using Prism.Services.Dialogs;
|
||||
|
||||
namespace DownKyi.PrismExtension.Dialog;
|
||||
|
||||
public class DialogService : Prism.Services.Dialogs.DialogService, IDialogService
|
||||
{
|
||||
private readonly IContainerExtension _containerExtension;
|
||||
|
||||
/// <summary>Initializes a new instance of the <see cref="DialogService"/> class.</summary>
|
||||
/// <param name="containerExtension">The <see cref="IContainerExtension" /></param>
|
||||
public DialogService(IContainerExtension containerExtension) : base(containerExtension)
|
||||
{
|
||||
_containerExtension = containerExtension;
|
||||
}
|
||||
|
||||
public Task ShowDialogAsync(string name, IDialogParameters parameters, Action<IDialogResult>? callback = null,
|
||||
string? windowName = null)
|
||||
{
|
||||
return ShowDialogInternal(name, parameters, callback, true, windowName);
|
||||
}
|
||||
|
||||
private Task ShowDialogInternal(string name, IDialogParameters parameters, Action<IDialogResult>? callback,
|
||||
bool isModal, string? windowName = null, Window? parentWindow = null)
|
||||
{
|
||||
if (parameters == null)
|
||||
parameters = new DialogParameters();
|
||||
|
||||
IDialogWindow dialogWindow = CreateDialogWindow(windowName);
|
||||
ConfigureDialogWindowEvents(dialogWindow, callback);
|
||||
ConfigureDialogWindowContent(name, dialogWindow, parameters);
|
||||
|
||||
return ShowDialogWindow(dialogWindow, isModal, parentWindow);
|
||||
}
|
||||
|
||||
protected virtual IDialogWindow CreateDialogWindow(string name)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name))
|
||||
return _containerExtension.Resolve<IDialogWindow>();
|
||||
else
|
||||
return _containerExtension.Resolve<IDialogWindow>(name);
|
||||
}
|
||||
|
||||
protected new virtual Task ShowDialogWindow(IDialogWindow dialogWindow, bool isModal, Window? owner = null)
|
||||
{
|
||||
if (isModal &&
|
||||
Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime deskLifetime)
|
||||
{
|
||||
// Ref:
|
||||
// - https://docs.avaloniaui.net/docs/controls/window#show-a-window-as-a-dialog
|
||||
// - https://github.com/AvaloniaUI/Avalonia/discussions/7924
|
||||
// (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktopLifetime)
|
||||
|
||||
if (owner != null)
|
||||
return dialogWindow.ShowDialog(owner);
|
||||
else
|
||||
return dialogWindow.ShowDialog(deskLifetime.MainWindow);
|
||||
}
|
||||
else
|
||||
{
|
||||
dialogWindow.Show();
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configure <see cref="IDialogWindow"/> content.
|
||||
/// </summary>
|
||||
/// <param name="dialogName">The name of the dialog to show.</param>
|
||||
/// <param name="window">The hosting window.</param>
|
||||
/// <param name="parameters">The parameters to pass to the dialog.</param>
|
||||
protected virtual void ConfigureDialogWindowContent(string dialogName, IDialogWindow window,
|
||||
IDialogParameters parameters)
|
||||
{
|
||||
var content = _containerExtension.Resolve<object>(dialogName);
|
||||
if (!(content is Control dialogContent))
|
||||
throw new NullReferenceException("A dialog's content must be a FrameworkElement");
|
||||
|
||||
MvvmHelpers.AutowireViewModel(dialogContent);
|
||||
|
||||
if (!(dialogContent.DataContext is IDialogAware viewModel))
|
||||
throw new NullReferenceException("A dialog's ViewModel must implement the IDialogAware interface");
|
||||
|
||||
ConfigureDialogWindowProperties(window, dialogContent, viewModel);
|
||||
|
||||
MvvmHelpers.ViewAndViewModelAction<IDialogAware>(viewModel, d => d.OnDialogOpened(parameters));
|
||||
}
|
||||
|
||||
protected void ConfigureDialogWindowProperties(IDialogWindow window, Control dialogContent,
|
||||
IDialogAware viewModel)
|
||||
{
|
||||
// Avalonia returns 'null' for Dialog.GetWindowStyle(dialogContent);
|
||||
// WPF: Window > ContentControl > FrameworkElement
|
||||
// Ava: Window > WindowBase > TopLevel > Control > InputElement > Interactive > Layoutable > Visual > StyledElement.Styles (collection)
|
||||
|
||||
var windowTheme = Dialog.GetTheme(dialogContent);
|
||||
if (windowTheme != null)
|
||||
{
|
||||
window.Theme = windowTheme;
|
||||
}
|
||||
|
||||
window.Content = dialogContent;
|
||||
window.DataContext = viewModel;
|
||||
|
||||
|
||||
// WPF
|
||||
//// var windowStyle = Dialog.GetWindowStyle(dialogContent);
|
||||
//// if (windowStyle != null)
|
||||
//// window.Style = windowStyle;
|
||||
////
|
||||
//// window.Content = dialogContent;
|
||||
//// window.DataContext = viewModel; //we want the host window and the dialog to share the same data context
|
||||
////
|
||||
//// if (window.Owner == null)
|
||||
// window.Owner = Application.Current?.Windows.OfType<Window>().FirstOrDefault(x => x.IsActive);
|
||||
}
|
||||
}
|
||||
12
DownKyi/PrismExtension/Dialog/DialogWindow.axaml
Normal file
12
DownKyi/PrismExtension/Dialog/DialogWindow.axaml
Normal file
@@ -0,0 +1,12 @@
|
||||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:CompileBindings="False"
|
||||
x:Class="DownKyi.PrismExtension.Dialog.DialogWindow"
|
||||
Title="{Binding Title}"
|
||||
WindowStartupLocation="CenterOwner">
|
||||
<Window.Styles>
|
||||
<Style Selector="Window">
|
||||
<Setter Property="SizeToContent" Value="WidthAndHeight" />
|
||||
</Style>
|
||||
</Window.Styles>
|
||||
</Window>
|
||||
14
DownKyi/PrismExtension/Dialog/DialogWindow.axaml.cs
Normal file
14
DownKyi/PrismExtension/Dialog/DialogWindow.axaml.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using Avalonia.Controls;
|
||||
using Prism.Services.Dialogs;
|
||||
|
||||
namespace DownKyi.PrismExtension.Dialog;
|
||||
|
||||
public partial class DialogWindow : Window, IDialogWindow
|
||||
{
|
||||
public DialogWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public IDialogResult? Result { get; set; }
|
||||
}
|
||||
@@ -2,7 +2,7 @@ using System;
|
||||
using System.Threading.Tasks;
|
||||
using Prism.Services.Dialogs;
|
||||
|
||||
namespace DownKyi.Services;
|
||||
namespace DownKyi.PrismExtension.Dialog;
|
||||
|
||||
public interface IDialogService : Prism.Services.Dialogs.IDialogService
|
||||
{
|
||||
8
DownKyi/PrismExtension/Dialog/IDialogWindow.cs
Normal file
8
DownKyi/PrismExtension/Dialog/IDialogWindow.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using Avalonia.Styling;
|
||||
|
||||
namespace DownKyi.PrismExtension.Dialog;
|
||||
|
||||
public interface IDialogWindow: Prism.Services.Dialogs.IDialogWindow
|
||||
{
|
||||
ControlTheme? Theme { get; set; }
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using DownKyi.Images;
|
||||
using DownKyi.Utils;
|
||||
using DownKyi.ViewModels.Dialogs;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.Services;
|
||||
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Prism.Ioc;
|
||||
using Prism.Services.Dialogs;
|
||||
|
||||
namespace DownKyi.Services;
|
||||
|
||||
public class DialogService : Prism.Services.Dialogs.DialogService, IDialogService
|
||||
{
|
||||
public DialogService(IContainerExtension containerExtension) : base(containerExtension)
|
||||
{
|
||||
}
|
||||
|
||||
public Task ShowDialogAsync(string name, IDialogParameters parameters, Action<IDialogResult>? callback = null,
|
||||
string? windowName = null)
|
||||
{
|
||||
return ShowDialogInternal(name, parameters, callback, true, windowName);
|
||||
}
|
||||
|
||||
private Task ShowDialogInternal(string name, IDialogParameters parameters, Action<IDialogResult>? callback,
|
||||
bool isModal, string? windowName = null, Window? parentWindow = null)
|
||||
{
|
||||
if (parameters == null)
|
||||
parameters = new DialogParameters();
|
||||
|
||||
IDialogWindow dialogWindow = CreateDialogWindow(windowName);
|
||||
ConfigureDialogWindowEvents(dialogWindow, callback);
|
||||
ConfigureDialogWindowContent(name, dialogWindow, parameters);
|
||||
|
||||
return ShowDialogWindow(dialogWindow, isModal, parentWindow);
|
||||
}
|
||||
|
||||
protected new virtual Task ShowDialogWindow(IDialogWindow dialogWindow, bool isModal, Window? owner = null)
|
||||
{
|
||||
if (isModal &&
|
||||
Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime deskLifetime)
|
||||
{
|
||||
// Ref:
|
||||
// - https://docs.avaloniaui.net/docs/controls/window#show-a-window-as-a-dialog
|
||||
// - https://github.com/AvaloniaUI/Avalonia/discussions/7924
|
||||
// (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktopLifetime)
|
||||
|
||||
if (owner != null)
|
||||
return dialogWindow.ShowDialog(owner);
|
||||
else
|
||||
return dialogWindow.ShowDialog(deskLifetime.MainWindow);
|
||||
}
|
||||
else
|
||||
{
|
||||
dialogWindow.Show();
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,7 @@ using DownKyi.ViewModels.DownloadManager;
|
||||
using DownKyi.ViewModels.PageViewModels;
|
||||
using Prism.Events;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.Services.Download;
|
||||
|
||||
|
||||
@@ -15,9 +15,9 @@ using DownKyi.Core.Settings;
|
||||
using DownKyi.Core.Utils;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.Models;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Utils;
|
||||
using DownKyi.ViewModels.DownloadManager;
|
||||
using Prism.Services.Dialogs;
|
||||
|
||||
namespace DownKyi.Services.Download;
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ using DownKyi.Core.Utils;
|
||||
using DownKyi.Models;
|
||||
using DownKyi.Utils;
|
||||
using DownKyi.ViewModels.DownloadManager;
|
||||
using Prism.Services.Dialogs;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using Console = DownKyi.Core.Utils.Debugging.Console;
|
||||
|
||||
namespace DownKyi.Services.Download;
|
||||
|
||||
@@ -15,7 +15,7 @@ using DownKyi.Core.Utils;
|
||||
using DownKyi.Models;
|
||||
using DownKyi.Utils;
|
||||
using DownKyi.ViewModels.DownloadManager;
|
||||
using Prism.Services.Dialogs;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
|
||||
namespace DownKyi.Services.Download;
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ using DownKyi.Core.Storage;
|
||||
using DownKyi.Core.Utils;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.Models;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Utils;
|
||||
using DownKyi.ViewModels.DownloadManager;
|
||||
using Console = DownKyi.Core.Utils.Debugging.Console;
|
||||
|
||||
60
DownKyi/Themes/Styles/StyleSystemBtn.axaml
Normal file
60
DownKyi/Themes/Styles/StyleSystemBtn.axaml
Normal file
@@ -0,0 +1,60 @@
|
||||
<ResourceDictionary xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<ControlTheme x:Key="SystemBtnStyle" TargetType="{x:Type Button}">
|
||||
<Setter Property="Cursor" Value="Hand" />
|
||||
<Setter Property="Background" Value="Transparent" />
|
||||
<Setter Property="BorderThickness" Value="0" />
|
||||
<Setter Property="BorderBrush" Value="{x:Null}" />
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type Button}">
|
||||
<Border
|
||||
Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
<ContentPresenter
|
||||
Name="content"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Content="{TemplateBinding Content}" />
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Style Selector="^:pointerover">
|
||||
<Setter Property="Background" Value="{DynamicResource BrushSystemBtnHover}" />
|
||||
</Style>
|
||||
<Style Selector="^:pressed">
|
||||
<Setter Property="Background" Value="{DynamicResource BrushSystemBtnPressed}" />
|
||||
</Style>
|
||||
</ControlTheme>
|
||||
|
||||
<ControlTheme
|
||||
x:Key="CloseBtnStyle"
|
||||
BasedOn="{StaticResource SystemBtnStyle}"
|
||||
TargetType="{x:Type Button}">
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="{x:Type Button}">
|
||||
<Border
|
||||
Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="{TemplateBinding BorderThickness}">
|
||||
<ContentPresenter
|
||||
Name="content"
|
||||
HorizontalAlignment="Center"
|
||||
VerticalAlignment="Center"
|
||||
Content="{TemplateBinding Content}" />
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Style Selector="^:pointerover">
|
||||
<Setter Property="Background" Value="{DynamicResource BrushCloseBtnHover}" />
|
||||
</Style>
|
||||
<Style Selector="^:pressed">
|
||||
<Setter Property="Background" Value="{DynamicResource BrushCloseBtnPressed}" />
|
||||
</Style>
|
||||
</ControlTheme>
|
||||
|
||||
</ResourceDictionary>
|
||||
@@ -7,7 +7,7 @@
|
||||
<ResourceInclude Source="/Themes/Colors/ColorDefault.axaml" />
|
||||
<ResourceInclude Source="/Themes/Styles/StyleBtn.axaml" />
|
||||
<ResourceInclude Source="/Themes/Styles/StyleImageBtn.axaml" />
|
||||
<!-- <ResourceInclude Source="Styles/StyleSystemBtn.xaml" /> -->
|
||||
<ResourceInclude Source="/Themes/Styles/StyleSystemBtn.axaml" />
|
||||
<ResourceInclude Source="/Themes/Styles/StyleCheckBox.axaml" />
|
||||
<ResourceInclude Source="/Themes/Styles/StyleListBox.axaml" />
|
||||
<!-- <ResourceInclude Source="Styles/StyleListView.xaml" /> -->
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
using DownKyi.Core.BiliApi.BiliUtils;
|
||||
using DownKyi.Core.BiliApi.Zone;
|
||||
using DownKyi.Models;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Utils;
|
||||
using Prism.Mvvm;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ using DownKyi.Services;
|
||||
using DownKyi.Utils;
|
||||
using Prism.Commands;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels.DownloadManager
|
||||
{
|
||||
|
||||
@@ -5,7 +5,7 @@ using DownKyi.Services;
|
||||
using DownKyi.Utils;
|
||||
using Prism.Commands;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels.DownloadManager
|
||||
{
|
||||
|
||||
@@ -13,7 +13,7 @@ using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using Console = DownKyi.Core.Utils.Debugging.Console;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels.DownloadManager
|
||||
{
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
using DownKyi.Core.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using DownKyi.Core.Logging;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.Models;
|
||||
using DownKyi.Services;
|
||||
@@ -7,13 +13,8 @@ using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
using Console = DownKyi.Core.Utils.Debugging.Console;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels.DownloadManager
|
||||
{
|
||||
@@ -199,7 +200,7 @@ namespace DownKyi.ViewModels.DownloadManager
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Core.Utils.Debugging.Console.PrintLine("SetDialogService()发生异常: {0}", e);
|
||||
Console.PrintLine("SetDialogService()发生异常: {0}", e);
|
||||
LogManager.Error($"{Tag}.SetDialogService()", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using DownKyi.Core.Settings;
|
||||
using DownKyi.Events;
|
||||
using DownKyi.Models;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Utils;
|
||||
using Prism.Commands;
|
||||
using Prism.Events;
|
||||
|
||||
@@ -11,7 +11,7 @@ using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels.Settings;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System;
|
||||
using Avalonia.Threading;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using Prism.Events;
|
||||
using Prism.Mvvm;
|
||||
using Prism.Regions;
|
||||
|
||||
@@ -19,8 +19,7 @@ using DownKyi.ViewModels.PageViewModels;
|
||||
using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels;
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ using DownKyi.Core.BiliApi.VideoStream;
|
||||
using DownKyi.CustomControl;
|
||||
using DownKyi.Events;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.Services.Download;
|
||||
using DownKyi.Utils;
|
||||
@@ -17,8 +18,6 @@ using DownKyi.ViewModels.PageViewModels;
|
||||
using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels;
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ using DownKyi.Core.Storage;
|
||||
using DownKyi.Core.Utils;
|
||||
using DownKyi.Events;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.Services.Download;
|
||||
using DownKyi.Utils;
|
||||
@@ -18,8 +19,6 @@ using DownKyi.ViewModels.PageViewModels;
|
||||
using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels;
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ using DownKyi.Core.BiliApi.VideoStream;
|
||||
using DownKyi.Core.Storage;
|
||||
using DownKyi.Events;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.Services.Download;
|
||||
using DownKyi.Utils;
|
||||
@@ -17,8 +18,6 @@ using DownKyi.ViewModels.PageViewModels;
|
||||
using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels;
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ using DownKyi.Core.BiliApi.VideoStream;
|
||||
using DownKyi.Core.Logging;
|
||||
using DownKyi.Events;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.Services.Download;
|
||||
using DownKyi.Utils;
|
||||
@@ -16,8 +17,6 @@ using DownKyi.ViewModels.PageViewModels;
|
||||
using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels;
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ using DownKyi.Core.Utils;
|
||||
using DownKyi.CustomControl;
|
||||
using DownKyi.Events;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.Services.Download;
|
||||
using DownKyi.Utils;
|
||||
|
||||
@@ -12,6 +12,7 @@ using DownKyi.Core.Utils;
|
||||
using DownKyi.CustomControl;
|
||||
using DownKyi.Events;
|
||||
using DownKyi.Images;
|
||||
using DownKyi.PrismExtension.Dialog;
|
||||
using DownKyi.Services;
|
||||
using DownKyi.Services.Download;
|
||||
using DownKyi.Utils;
|
||||
@@ -19,8 +20,6 @@ using DownKyi.ViewModels.PageViewModels;
|
||||
using Prism.Commands;
|
||||
using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels;
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ using Prism.Events;
|
||||
using Prism.Regions;
|
||||
using Prism.Services.Dialogs;
|
||||
using Console = DownKyi.Core.Utils.Debugging.Console;
|
||||
using IDialogService = DownKyi.Services.IDialogService;
|
||||
using IDialogService = DownKyi.PrismExtension.Dialog.IDialogService;
|
||||
|
||||
namespace DownKyi.ViewModels;
|
||||
|
||||
|
||||
@@ -4,7 +4,20 @@
|
||||
xmlns:prism="http://prismlibrary.com/"
|
||||
prism:ViewModelLocator.AutoWireViewModel="True"
|
||||
xmlns:vmd="clr-namespace:DownKyi.ViewModels.Dialogs"
|
||||
x:DataType="vmd:ViewAlertDialogViewModel">
|
||||
xmlns:prismExtension="clr-namespace:DownKyi.PrismExtension.Dialog"
|
||||
x:DataType="vmd:ViewAlertDialogViewModel"
|
||||
xmlns:i="using:Avalonia.Xaml.Interactivity"
|
||||
xmlns:ia="clr-namespace:Avalonia.Xaml.Interactions.Core;assembly=Avalonia.Xaml.Interactions">
|
||||
|
||||
<prismExtension:Dialog.Theme>
|
||||
<ControlTheme TargetType="Window">
|
||||
<Setter Property="CanResize" Value="False" />
|
||||
<Setter Property="ShowInTaskbar" Value="False" />
|
||||
<Setter Property="SizeToContent" Value="WidthAndHeight" />
|
||||
<Setter Property="SystemDecorations" Value="None" />
|
||||
</ControlTheme>
|
||||
</prismExtension:Dialog.Theme>
|
||||
|
||||
<Border BorderBrush="{DynamicResource BrushWindowBorder}" BorderThickness="1,1,0.6,0.6">
|
||||
<Grid Background="{DynamicResource BrushBackground}" RowDefinitions="40,*">
|
||||
|
||||
@@ -18,7 +31,9 @@
|
||||
Margin="10,0"
|
||||
VerticalAlignment="Center"
|
||||
Orientation="Horizontal">
|
||||
<ContentControl Margin="0,0,10,0">
|
||||
<ContentControl
|
||||
Margin="0,0,10,0"
|
||||
IsVisible="{Binding Image,Converter={x:Static ObjectConverters.IsNotNull}}">
|
||||
<Path
|
||||
Width="{Binding Image.Width}"
|
||||
Height="{Binding Image.Height}"
|
||||
@@ -34,12 +49,14 @@
|
||||
</StackPanel>
|
||||
<Button
|
||||
Grid.Column="4"
|
||||
Command="{Binding CloseCommand}">
|
||||
Command="{Binding CloseCommand}"
|
||||
ToolTip.Tip="{DynamicResource Close}"
|
||||
Theme="{StaticResource CloseBtnStyle}">
|
||||
<Path
|
||||
Width="{Binding CloseIcon.Width}"
|
||||
Height="{Binding CloseIcon.Height}"
|
||||
Data="{Binding CloseIcon.Data}"
|
||||
Fill="{Binding CloseIcon.Fill}"
|
||||
Fill="{DynamicResource ColorSystemBtnTintDark}"
|
||||
Stretch="UniformToFill" />
|
||||
</Button>
|
||||
</Grid>
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="DownKyi.Views.Dialogs.ViewDownloadSetter"
|
||||
xmlns:prism="http://prismlibrary.com/"
|
||||
prism:ViewModelLocator.AutoWireViewModel="True"
|
||||
xmlns:vmd="clr-namespace:DownKyi.ViewModels.Dialogs"
|
||||
xmlns:prismExtension="clr-namespace:DownKyi.PrismExtension.Dialog"
|
||||
x:DataType="vmd:ViewDownloadSetterViewModel">
|
||||
<prismExtension:Dialog.Theme>
|
||||
<ControlTheme TargetType="Window">
|
||||
<Setter Property="CanResize" Value="False" />
|
||||
<Setter Property="ShowInTaskbar" Value="False" />
|
||||
<Setter Property="SizeToContent" Value="WidthAndHeight" />
|
||||
<Setter Property="SystemDecorations" Value="None" />
|
||||
</ControlTheme>
|
||||
</prismExtension:Dialog.Theme>
|
||||
<Border BorderBrush="{DynamicResource BrushWindowBorder}" BorderThickness="1,1,1,0.6">
|
||||
<Grid Background="{DynamicResource BrushBackground}" RowDefinitions="40,*">
|
||||
|
||||
|
||||
@@ -4,24 +4,45 @@
|
||||
prism:ViewModelLocator.AutoWireViewModel="True"
|
||||
x:Class="DownKyi.Views.Dialogs.ViewParsingSelector"
|
||||
xmlns:vmd="clr-namespace:DownKyi.ViewModels.Dialogs"
|
||||
xmlns:prismExtension="clr-namespace:DownKyi.PrismExtension.Dialog"
|
||||
x:DataType="vmd:ViewParsingSelectorViewModel">
|
||||
<!--<prism:Dialog.WindowStyle>
|
||||
<Style Selector="Window">
|
||||
<Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterOwner" />
|
||||
|
||||
<prismExtension:Dialog.Theme>
|
||||
<ControlTheme TargetType="Window">
|
||||
<Setter Property="CanResize" Value="False" />
|
||||
<Setter Property="ShowInTaskbar" Value="False" />
|
||||
<Setter Property="SizeToContent" Value="WidthAndHeight" />
|
||||
~1~ <Setter Property="WindowStyle" Value="None" /> @1@
|
||||
</Style>
|
||||
</prism:Dialog.WindowStyle>-->
|
||||
<Setter Property="SystemDecorations" Value="None" />
|
||||
</ControlTheme>
|
||||
</prismExtension:Dialog.Theme>
|
||||
|
||||
<Border BorderBrush="{DynamicResource BrushWindowBorder}" BorderThickness="1,1,1,0.6">
|
||||
<Grid Background="{DynamicResource BrushBackground}" RowDefinitions="40,*">
|
||||
|
||||
<Grid
|
||||
Grid.Row="0"
|
||||
Background="{DynamicResource BrushBackgroundGreyTranslucent3}">
|
||||
|
||||
<Grid
|
||||
Grid.Row="0"
|
||||
Background="{DynamicResource BrushBackgroundGreyTranslucent3}" ColumnDefinitions="*,50,*,50">
|
||||
<TextBlock
|
||||
Grid.Column="0"
|
||||
Margin="10,0"
|
||||
VerticalAlignment="Center"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource BrushCaptionForeground}"
|
||||
Text="{Binding Title}" />
|
||||
|
||||
<Button
|
||||
Grid.Column="4"
|
||||
Command="{Binding CloseCommand}"
|
||||
Theme="{StaticResource CloseBtnStyle}"
|
||||
ToolTip.Tip="{DynamicResource Close}">
|
||||
<Path
|
||||
Width="{Binding CloseIcon.Width}"
|
||||
Height="{Binding CloseIcon.Height}"
|
||||
Data="{Binding CloseIcon.Data}"
|
||||
Fill="{Binding CloseIcon.Fill}"
|
||||
Stretch="UniformToFill" />
|
||||
</Button>
|
||||
|
||||
</Grid>
|
||||
|
||||
<StackPanel
|
||||
|
||||
Reference in New Issue
Block a user