Skip to content

Commit 41c4feb

Browse files
authored
Ensure control styles load in isolation (#3098)
* WIP tests for issue 3049 * Fix 3049 This test ensures that at least many of the basic controls can load their default styles in isolation without needing to pulling all of MDIX
1 parent ef7214b commit 41c4feb

File tree

4 files changed

+93
-6
lines changed

4 files changed

+93
-6
lines changed

Directory.packages.props

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<PackageVersion Include="Microsoft.Composition" Version="1.0.31" />
1414
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
1515
<PackageVersion Include="Microsoft.NETCore.Platforms" Version="7.0.0" />
16-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
16+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
1717
<PackageVersion Include="Microsoft.Toolkit.MVVM" Version="7.1.2" />
1818
<PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
1919
<PackageVersion Include="Newtonsoft.Json" Version="13.0.2" />
@@ -22,7 +22,7 @@
2222
<PackageVersion Include="ShowMeTheXAML.AvalonEdit" Version="2.0.0" />
2323
<PackageVersion Include="ShowMeTheXAML.MSBuild" Version="2.0.0" />
2424
<PackageVersion Include="VirtualizingWrapPanel" Version="1.5.7" />
25-
<PackageVersion Include="XAMLTest" Version="1.0.0-ci390" />
25+
<PackageVersion Include="XAMLTest" Version="1.0.0-ci393" />
2626
<PackageVersion Include="xunit" Version="2.4.2" />
2727
<PackageVersion Include="xunit.runner.visualstudio" Version="2.4.5" />
2828
<PackageVersion Include="Xunit.StaFact" Version="1.1.11" />
+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
using System.Reflection;
2+
using MaterialDesignColors;
3+
4+
namespace MaterialDesignThemes.UITests;
5+
6+
public class AllStyles : TestBase
7+
{
8+
public AllStyles(ITestOutputHelper output)
9+
: base(output)
10+
{ }
11+
12+
[Theory]
13+
[InlineData("Button", "MaterialDesignRaisedButton")]
14+
[InlineData("Calendar", "MaterialDesignCalendarPortrait")]
15+
[InlineData("CheckBox", "MaterialDesignCheckBox")]
16+
[InlineData("ComboBox", "MaterialDesignComboBox")]
17+
[InlineData("DataGrid", "MaterialDesignDataGrid")]
18+
[InlineData("DatePicker", "MaterialDesignDatePicker")]
19+
[InlineData("Expander", "MaterialDesignExpander")]
20+
[InlineData("GridSplitter", "MaterialDesignGridSplitter")]
21+
[InlineData("GroupBox", "MaterialDesignGroupBox")]
22+
[InlineData("Label", "MaterialDesignLabel")]
23+
[InlineData("ListBox", "MaterialDesignListBox")]
24+
[InlineData("ListView", "MaterialDesignListView")]
25+
[InlineData("Menu", "MaterialDesignMenu")]
26+
[InlineData("PasswordBox", "MaterialDesignPasswordBox")]
27+
[InlineData("ProgressBar", "MaterialDesignLinearProgressBar")]
28+
[InlineData("RadioButton", "MaterialDesignRadioButton")]
29+
[InlineData("RichTextBox", "MaterialDesignRichTextBox")]
30+
[InlineData("ScrollBar", "MaterialDesignScrollBar")]
31+
[InlineData("ScrollViewer", "MaterialDesignScrollViewer")]
32+
[InlineData("Slider", "MaterialDesignSlider")]
33+
[InlineData("TabControl", "MaterialDesignTabControl")]
34+
[InlineData("TextBox", "MaterialDesignTextBox")]
35+
[InlineData("ToggleButton", "MaterialDesignSwitchToggleButton")]
36+
[InlineData("ToolBar", "MaterialDesignToolBar")]
37+
[InlineData("TreeView", "MaterialDesignTreeView")]
38+
public async Task LoadStyleInIsolation_CanBeLoaded(string controlName, string styleName)
39+
{
40+
await using var recorder = new TestRecorder(App);
41+
42+
string applicationResourceXaml = $$"""
43+
<ResourceDictionary
44+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
45+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
46+
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes">
47+
<ResourceDictionary.MergedDictionaries>
48+
<materialDesign:BundledTheme BaseTheme="{{BaseTheme.Inherit}}" PrimaryColor="{{PrimaryColor.Purple}}" SecondaryColor="{{SecondaryColor.Blue}}" />
49+
50+
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.{{controlName}}.xaml" />
51+
</ResourceDictionary.MergedDictionaries>
52+
53+
<Style TargetType="{x:Type {{controlName}}}" BasedOn="{StaticResource {{styleName}}}" />
54+
</ResourceDictionary>
55+
""";
56+
57+
await App.Initialize(applicationResourceXaml,
58+
Path.GetFullPath("MaterialDesignColors.dll"),
59+
Path.GetFullPath("MaterialDesignThemes.Wpf.dll"),
60+
Assembly.GetExecutingAssembly().Location);
61+
62+
IWindow window = await App.CreateWindow($$"""
63+
<Window
64+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
65+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
66+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
67+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
68+
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
69+
mc:Ignorable="d"
70+
Height="800" Width="1100"
71+
TextElement.Foreground="{DynamicResource MaterialDesignBody}"
72+
TextElement.FontWeight="Regular"
73+
TextElement.FontSize="13"
74+
TextOptions.TextFormattingMode="Ideal"
75+
TextOptions.TextRenderingMode="Auto"
76+
Background="{DynamicResource MaterialDesignPaper}"
77+
FontFamily="{materialDesign:MaterialDesignFont}"
78+
Title="Test Window"
79+
Topmost="True"
80+
WindowStartupLocation="CenterScreen">
81+
<{{controlName}} />
82+
</Window>
83+
""");
84+
85+
Assert.True(await window.GetIsVisible());
86+
}
87+
}

MaterialDesignThemes.UITests/TestBase.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public async Task InitializeAsync() =>
4343
App = await XamlTest.App.StartRemote(new AppOptions
4444
{
4545
AllowVisualStudioDebuggerAttach = true,
46-
LogMessage = message => Output.WriteLine(message)
46+
LogMessage = Output.WriteLine
4747
});
4848
public async Task DisposeAsync() => await App.DisposeAsync();
4949
}

MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ComboBox.xaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@
5050
</Style>
5151

5252
<ControlTemplate x:Key="PopupContentClassicTemplate" TargetType="ContentControl">
53-
<Grid MinWidth="{Binding Path=ContentMinWidth, RelativeSource={RelativeSource AncestorType=wpf:ComboBoxPopup}}" Margin="{Binding Path=ContentMargin, RelativeSource={RelativeSource AncestorType=wpf:ComboBoxPopup}}">
53+
<Grid MinWidth="{Binding Path=ContentMinWidth, RelativeSource={RelativeSource AncestorType=wpf:ComboBoxPopup}}"
54+
Margin="{Binding Path=ContentMargin, RelativeSource={RelativeSource AncestorType=wpf:ComboBoxPopup}}">
5455
<Grid.RowDefinitions>
5556
<RowDefinition Height="*" />
5657
</Grid.RowDefinitions>
@@ -412,7 +413,6 @@
412413
wpf:ColorZoneAssist.Mode="{Binding Path=(wpf:ColorZoneAssist.Mode), RelativeSource={RelativeSource TemplatedParent}}"
413414
AllowsTransparency="True"
414415
ClassicContentTemplate="{StaticResource PopupContentClassicTemplate}"
415-
ClassicMode="True"
416416
ContentMargin="6,0,6,6"
417417
ContentMinWidth="{Binding Path=ActualWidth, ElementName=templateRoot}"
418418
DefaultVerticalOffset="-1"
@@ -437,7 +437,7 @@
437437
</MultiBinding>
438438
</wpf:ComboBoxPopup.Background>
439439
<wpf:ComboBoxPopup.Style>
440-
<Style TargetType="wpf:ComboBoxPopup" BasedOn="{StaticResource {x:Type wpf:ComboBoxPopup}}">
440+
<Style TargetType="wpf:ComboBoxPopup">
441441
<Setter Property="CornerRadius" Value="0,0,4,4" />
442442
<Style.Triggers>
443443
<Trigger Property="OpenDirection" Value="Up">

0 commit comments

Comments
 (0)