using System.Windows;
using System.Windows.Controls;
using XFEToolBox.WpfCore.Controls;
namespace XFEToolBox.Client.Wpf.Test;
public static class UnifiedControlDefaultsTests
{
[Test]
public static void DataGridGeneratedColumnsReceiveUnifiedStylesWithoutOverwritingExplicitStyles()
{
RunSta(() =>
{
var elementStyle = new Style(typeof(CheckBox));
var editingStyle = new Style(typeof(CheckBox));
var grid = new DataGrid();
DataGridAssist.SetCheckBoxElementStyle(grid, elementStyle);
DataGridAssist.SetCheckBoxEditingStyle(grid, editingStyle);
DataGridAssist.SetUseUnifiedCellControls(grid, true);
var generatedColumn = new DataGridCheckBoxColumn();
grid.Columns.Add(generatedColumn);
Ensure(ReferenceEquals(generatedColumn.ElementStyle, elementStyle),
"DataGridCheckBoxColumn 仍在使用 WPF 系统默认显示样式。");
Ensure(ReferenceEquals(generatedColumn.EditingElementStyle, editingStyle),
"DataGridCheckBoxColumn 仍在使用 WPF 系统默认编辑样式。");
var explicitStyle = new Style(typeof(CheckBox));
var explicitColumn = new DataGridCheckBoxColumn { ElementStyle = explicitStyle };
grid.Columns.Add(explicitColumn);
Ensure(ReferenceEquals(explicitColumn.ElementStyle, explicitStyle),
"统一样式覆盖了页面作者显式指定的列样式。");
});
}
[Test]
public static void ProgressRingDefaultsToZeroAndInactive()
{
RunSta(() =>
{
var ring = new ProgressRing();
Ensure(Math.Abs(ring.Value) < double.Epsilon, "ProgressRing 默认 Value 不是 0。");
Ensure(!ring.IsActive, "ProgressRing 默认状态仍会启动进度动画。");
});
}
private static void RunSta(Action action)
{
Exception? failure = null;
var thread = new Thread(() =>
{
try { action(); }
catch (Exception exception) { failure = exception; }
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Ensure(thread.Join(TimeSpan.FromSeconds(10)), "WPF 控件测试超时。");
if (failure is not null)
throw new InvalidOperationException(failure.Message, failure);
}
private static void Ensure(bool condition, string message)
{
if (!condition)
throw new InvalidOperationException(message);
}
}
using System.Windows;
using System.Windows.Controls;
using XFEToolBox.WpfCore.Controls;
namespace XFEToolBox.Client.Wpf.Test;
public static class UnifiedControlDefaultsTests
{
[Test]
public static void DataGridGeneratedColumnsReceiveUnifiedStylesWithoutOverwritingExplicitStyles()
{
RunSta(() =>
{
var elementStyle = new Style(typeof(CheckBox));
var editingStyle = new Style(typeof(CheckBox));
var grid = new DataGrid();
DataGridAssist.SetCheckBoxElementStyle(grid, elementStyle);
DataGridAssist.SetCheckBoxEditingStyle(grid, editingStyle);
DataGridAssist.SetUseUnifiedCellControls(grid, true);
var generatedColumn = new DataGridCheckBoxColumn();
grid.Columns.Add(generatedColumn);
Ensure(ReferenceEquals(generatedColumn.ElementStyle, elementStyle),
"DataGridCheckBoxColumn 仍在使用 WPF 系统默认显示样式。");
Ensure(ReferenceEquals(generatedColumn.EditingElementStyle, editingStyle),
"DataGridCheckBoxColumn 仍在使用 WPF 系统默认编辑样式。");
var explicitStyle = new Style(typeof(CheckBox));
var explicitColumn = new DataGridCheckBoxColumn { ElementStyle = explicitStyle };
grid.Columns.Add(explicitColumn);
Ensure(ReferenceEquals(explicitColumn.ElementStyle, explicitStyle),
"统一样式覆盖了页面作者显式指定的列样式。");
});
}
[Test]
public static void ProgressRingDefaultsToZeroAndInactive()
{
RunSta(() =>
{
var ring = new ProgressRing();
Ensure(Math.Abs(ring.Value) < double.Epsilon, "ProgressRing 默认 Value 不是 0。");
Ensure(!ring.IsActive, "ProgressRing 默认状态仍会启动进度动画。");
});
}
private static void RunSta(Action action)
{
Exception? failure = null;
var thread = new Thread(() =>
{
try { action(); }
catch (Exception exception) { failure = exception; }
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Ensure(thread.Join(TimeSpan.FromSeconds(10)), "WPF 控件测试超时。");
if (failure is not null)
throw new InvalidOperationException(failure.Message, failure);
}
private static void Ensure(bool condition, string message)
{
if (!condition)
throw new InvalidOperationException(message);
}
}