Merge pull request #465 from irihitech/issue-422
New Dialog/Drawer/MessageBox option: StyleClass
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Headless.XUnit;
|
||||
using Avalonia.Threading;
|
||||
using Avalonia.VisualTree;
|
||||
using Ursa.Controls;
|
||||
using Xunit;
|
||||
|
||||
namespace HeadlessTest.Ursa.Controls.DialogTests.StyleClassTests;
|
||||
|
||||
public class StyleClassTests
|
||||
{
|
||||
[AvaloniaFact]
|
||||
public void StyleClass_Changes_Button_Content()
|
||||
{
|
||||
var vm = new TestViewModel();
|
||||
var ursaWindow = new TestWindow()
|
||||
{
|
||||
DataContext = vm,
|
||||
};
|
||||
ursaWindow.Show();
|
||||
vm.InvokeDialog("Custom", ursaWindow.GetHashCode());
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
var dialog = ursaWindow.GetVisualDescendants().OfType<DefaultDialogControl>().SingleOrDefault();
|
||||
Assert.NotNull(dialog);
|
||||
Assert.Contains("Custom", dialog.Classes);
|
||||
var okButton = dialog.GetVisualDescendants().OfType<Button>().SingleOrDefault(a=>a.Name == DefaultDialogControl.PART_OKButton);
|
||||
Assert.NotNull(okButton);
|
||||
Assert.Equal("CUSTOM", okButton.Content);
|
||||
var cancelButton = dialog.GetVisualDescendants().OfType<Button>().SingleOrDefault(a=>a.Name == DefaultDialogControl.PART_CancelButton);
|
||||
Assert.NotNull(cancelButton);
|
||||
Assert.Equal("取消", cancelButton.Content);
|
||||
ursaWindow.Close();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void StyleClass_Changes_Button_Content_With_Multiple_Classes()
|
||||
{
|
||||
var vm = new TestViewModel();
|
||||
var ursaWindow = new TestWindow()
|
||||
{
|
||||
DataContext = vm,
|
||||
};
|
||||
ursaWindow.Show();
|
||||
vm.InvokeDialog("Custom Custom2", ursaWindow.GetHashCode());
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
var dialog = ursaWindow.GetVisualDescendants().OfType<DefaultDialogControl>().SingleOrDefault();
|
||||
Assert.NotNull(dialog);
|
||||
Assert.Contains("Custom", dialog.Classes);
|
||||
Assert.Contains("Custom2", dialog.Classes);
|
||||
var okButton = dialog.GetVisualDescendants().OfType<Button>().SingleOrDefault(a=>a.Name == DefaultDialogControl.PART_OKButton);
|
||||
Assert.NotNull(okButton);
|
||||
Assert.Equal("CUSTOM", okButton.Content);
|
||||
Assert.Contains("Warning", okButton.Classes);
|
||||
Assert.Contains("Small", okButton.Classes);
|
||||
var cancelButton = dialog.GetVisualDescendants().OfType<Button>().SingleOrDefault(a=>a.Name == DefaultDialogControl.PART_CancelButton);
|
||||
Assert.NotNull(cancelButton);
|
||||
Assert.Equal("取消", cancelButton.Content);
|
||||
ursaWindow.Close();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public void StyleClass_Changes_Button_Content_With_No_StyleClass()
|
||||
{
|
||||
var vm = new TestViewModel();
|
||||
var ursaWindow = new TestWindow()
|
||||
{
|
||||
DataContext = vm,
|
||||
};
|
||||
ursaWindow.Show();
|
||||
vm.InvokeDialog(null, ursaWindow.GetHashCode());
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
var dialog = ursaWindow.GetVisualDescendants().OfType<DefaultDialogControl>().SingleOrDefault();
|
||||
Assert.NotNull(dialog);
|
||||
Assert.DoesNotContain("Custom", dialog.Classes);
|
||||
var okButton = dialog.GetVisualDescendants().OfType<Button>().SingleOrDefault(a=>a.Name == DefaultDialogControl.PART_OKButton);
|
||||
Assert.NotNull(okButton);
|
||||
Assert.Equal("确认", okButton.Content);
|
||||
var cancelButton = dialog.GetVisualDescendants().OfType<Button>().SingleOrDefault(a=>a.Name == DefaultDialogControl.PART_CancelButton);
|
||||
Assert.NotNull(cancelButton);
|
||||
Assert.Equal("取消", cancelButton.Content);
|
||||
ursaWindow.Close();
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using Avalonia.Controls;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Ursa.Controls;
|
||||
|
||||
namespace HeadlessTest.Ursa.Controls.DialogTests.StyleClassTests;
|
||||
|
||||
public class TestViewModel: ObservableObject
|
||||
{
|
||||
public void InvokeDialog(string? classes, int? hash)
|
||||
{
|
||||
OverlayDialog.Show<TextBlock, string>("Hello World", options: new OverlayDialogOptions()
|
||||
{
|
||||
Buttons = DialogButton.OKCancel,
|
||||
StyleClass = classes,
|
||||
TopLevelHashCode = hash,
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<u:UrsaWindow xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:u="https://irihi.tech/ursa"
|
||||
xmlns:helpers="clr-namespace:Irihi.Avalonia.Shared.Helpers;assembly=Irihi.Avalonia.Shared"
|
||||
mc:Ignorable="d" d:DesignWidth="800"
|
||||
d:DesignHeight="450"
|
||||
x:Class="HeadlessTest.Ursa.Controls.DialogTests.StyleClassTests.TestWindow"
|
||||
Title="TestWindow">
|
||||
<u:UrsaWindow.Styles>
|
||||
<Style Selector="u|DefaultDialogControl.Custom">
|
||||
<Style Selector="^ /template/ Button#PART_OKButton">
|
||||
<Setter Property="Content" Value="CUSTOM"/>
|
||||
</Style>
|
||||
</Style>
|
||||
<Style Selector="u|DefaultDialogControl.Custom2">
|
||||
<Style Selector="^ /template/ Button#PART_OKButton">
|
||||
<Setter Property="helpers:ClassHelper.Classes" Value="Warning Small" />
|
||||
</Style>
|
||||
</Style>
|
||||
</u:UrsaWindow.Styles>
|
||||
Welcome to Avalonia!
|
||||
|
||||
</u:UrsaWindow>
|
||||
@@ -0,0 +1,14 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Ursa.Controls;
|
||||
|
||||
namespace HeadlessTest.Ursa.Controls.DialogTests.StyleClassTests;
|
||||
|
||||
public partial class TestWindow : UrsaWindow
|
||||
{
|
||||
public TestWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Avalonia.Headless.XUnit" Version="11.1.3" />
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.0" />
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.0"/>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0"/>
|
||||
<PackageReference Include="Semi.Avalonia" Version="11.1.0.4" />
|
||||
|
||||
Reference in New Issue
Block a user