Browse Source

Merge pull request #11843 from AvaloniaUI/fix-palette-getresourcec-code

Fix palette TryGetResource code
pull/11971/head
Max Katz 3 years ago
committed by GitHub
parent
commit
53d8f2b649
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      samples/ControlCatalog/App.xaml
  2. 4
      samples/ControlCatalog/App.xaml.cs
  3. 2
      src/Avalonia.Controls/AppBuilder.cs
  4. 18
      src/Avalonia.Themes.Fluent/ColorPaletteResourcesCollection.cs

3
samples/ControlCatalog/App.xaml

@ -28,6 +28,9 @@
</ResourceDictionary.ThemeDictionaries> </ResourceDictionary.ThemeDictionaries>
<!-- Styles attached dynamically depending on current theme (simple or fluent) --> <!-- Styles attached dynamically depending on current theme (simple or fluent) -->
<FluentTheme x:Key="FluentTheme">
</FluentTheme>
<SimpleTheme x:Key="SimpleTheme" />
<StyleInclude x:Key="DataGridFluent" Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml" /> <StyleInclude x:Key="DataGridFluent" Source="avares://Avalonia.Controls.DataGrid/Themes/Fluent.xaml" />
<StyleInclude x:Key="DataGridSimple" Source="avares://Avalonia.Controls.DataGrid/Themes/Simple.xaml" /> <StyleInclude x:Key="DataGridSimple" Source="avares://Avalonia.Controls.DataGrid/Themes/Simple.xaml" />
<StyleInclude x:Key="ColorPickerFluent" Source="avares://Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml" /> <StyleInclude x:Key="ColorPickerFluent" Source="avares://Avalonia.Controls.ColorPicker/Themes/Fluent/Fluent.xaml" />

4
samples/ControlCatalog/App.xaml.cs

@ -30,8 +30,8 @@ namespace ControlCatalog
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
_fluentTheme = new FluentTheme(); _fluentTheme = (FluentTheme)Resources["FluentTheme"]!;
_simpleTheme = new SimpleTheme(); _simpleTheme = (SimpleTheme)Resources["SimpleTheme"]!;
_colorPickerFluent = (IStyle)Resources["ColorPickerFluent"]!; _colorPickerFluent = (IStyle)Resources["ColorPickerFluent"]!;
_colorPickerSimple = (IStyle)Resources["ColorPickerSimple"]!; _colorPickerSimple = (IStyle)Resources["ColorPickerSimple"]!;
_dataGridFluent = (IStyle)Resources["DataGridFluent"]!; _dataGridFluent = (IStyle)Resources["DataGridFluent"]!;

2
src/Avalonia.Controls/AppBuilder.cs

@ -151,7 +151,7 @@ namespace Avalonia
} }
throw new InvalidOperationException( throw new InvalidOperationException(
$"Unable to create AppBuilder from type {entryPointType.Name}." + $"Unable to create AppBuilder from type \"{entryPointType.FullName}\". " +
$"Input type either needs to have BuildAvaloniaApp -> AppBuilder method or inherit Application type."); $"Input type either needs to have BuildAvaloniaApp -> AppBuilder method or inherit Application type.");
} }

18
src/Avalonia.Themes.Fluent/ColorPaletteResourcesCollection.cs

@ -10,12 +10,18 @@ internal class ColorPaletteResourcesCollection : AvaloniaDictionary<ThemeVariant
public ColorPaletteResourcesCollection() : base(2) public ColorPaletteResourcesCollection() : base(2)
{ {
this.ForEachItem( this.ForEachItem(
(_, x) => (key, x) =>
{ {
if (Owner is not null) if (Owner is not null)
{ {
x.PropertyChanged += Palette_PropertyChanged; x.PropertyChanged += Palette_PropertyChanged;
} }
if (key != ThemeVariant.Dark && key != ThemeVariant.Light)
{
throw new InvalidOperationException(
$"{nameof(FluentTheme)}.{nameof(FluentTheme.Palettes)} only supports Light and Dark variants.");
}
}, },
(_, x) => (_, x) =>
{ {
@ -30,9 +36,13 @@ internal class ColorPaletteResourcesCollection : AvaloniaDictionary<ThemeVariant
public bool HasResources => Count > 0; public bool HasResources => Count > 0;
public bool TryGetResource(object key, ThemeVariant? theme, out object? value) public bool TryGetResource(object key, ThemeVariant? theme, out object? value)
{ {
theme ??= ThemeVariant.Default; if (theme == null || theme == ThemeVariant.Default)
if (base.TryGetValue(theme, out var paletteResources) {
&& paletteResources.TryGetResource(key, theme, out value)) theme = ThemeVariant.Light;
}
if (base.TryGetValue(theme, out var themePaletteResources)
&& themePaletteResources.TryGetResource(key, theme, out value))
{ {
return true; return true;
} }

Loading…
Cancel
Save