Open dpaulino opened 5 years ago
Sounds like an issue with the resource lookup/override stuff.
hi all, any updates on this? My customers are wanting the ability to change the app's colour manually without changing their OS colours. This issue with the TreeView is blocking me.
Have you tried putting the color override in a different place in the app.xaml? It might need to be "earlier" than the inclusion of XamlControlsResources in order to take effect. But it's more likely that accent colors is just not a set of resources that's possible to override in the way you're doing it.
That said, in Windows 1803 and greater there is the ColorPaletteResources class which lets you override accent color more reliably and you could try that out.
So you're saying to change this
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
</ResourceDictionary.MergedDictionaries>
<Color x:Key="SystemAccentColor">#00CC6A</Color>
</ResourceDictionary>
</Application.Resources>
to this?
<Application.Resources>
<ResourceDictionary>
<Color x:Key="SystemAccentColor">#00CC6A</Color>
<ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Not quite, I think you'd have to order them in the MergedDictionaries list like:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<Color x:Key="SystemAccentColor">#00CC6A</Color>
</ResourceDictionary>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Just tried your suggestion, @jevansaks Didn't work 😞
And did you try ColorPaletteResources yet?
Is there a way of using that in older versions of Windows 10? I get an error when I try to use ColorPaletteResources:
You would need to use conditional XAML to use it only 17134+.
Still not working 😞
Hi all, any updates on this issue? My customers are asking to be able to customize my app's colours, but I cannot implement this feature due to this treeview issue
Friendly ping. Any thoughts on whether this will be addressed or not?
Hello again, I'm wondering if there's an estimate of the work required for this bug to be fixed?
Cloned the branch and tried the repro. Button (set to AccentButtonStyle
) picks up the value from ColorPaletteResources, TreeView's selected state does not. I don't know if this is a TreeView issue or a general styling issue similar to #430.
TreeViewItem's selected state maps to TreeViewItemBackgroundSelected
which in turn maps to SystemControlHighlightAccent3RevealBackgroundBrush
. You'd think this would be hit by the accent color.
Needs further investigation.
Anything I can do to help with the investigation? If it's a simple fix, I'd be glad to try to fix this myself. (I'd have to learn how to set up the whole library repo but I'd still be happy to try)
Friendly ping. Anyone have ideas?
@dpaulino As a workaround for now, you could use the accent brushes used by the ListView:
<c:TreeView ItemsSource="{x:Bind ViewModel.Nodes}"
DragItemsCompleted="TreeView_DragItemsCompleted"
DragItemsStarting="TreeView_DragItemsStarting">
<c:TreeView.Resources>
<StaticResource x:Key="TreeViewItemBackgroundSelected" ResourceKey="ListViewItemBackgroundSelected" />
<StaticResource x:Key="TreeViewItemBackgroundSelectedPointerOver" ResourceKey="ListViewItemBackgroundSelectedPointerOver" />
<StaticResource x:Key="TreeViewItemBackgroundSelectedPressed" ResourceKey="ListViewItemBackgroundSelectedPressed" />
</c:TreeView.Resources>
<c:TreeView.ItemTemplate>
<DataTemplate x:DataType="local:ExplorerItem">
<c:TreeViewItem ItemsSource="{x:Bind Children}" Content="{x:Bind Name}"/>
</DataTemplate>
</c:TreeView.ItemTemplate>
</c:TreeView>
The issue you are seeing here is that the brushes used for the TreeViewItem are not picking up the overriden SystemAccentColor
. The ListViewItem brushes do, however, because they are directly consuming the overriden SystemAccentColor
:
<StaticResource x:Key="ListViewItemBackgroundSelected" ResourceKey="SystemControlHighlightListAccentLowBrush" />
<SolidColorBrush x:Key="SystemControlHighlightListAccentLowBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.4" />
<StaticResource x:Key="TreeViewItemBackgroundSelected" ResourceKey="SystemControlHighlightAccent3RevealBackgroundBrush" />
<RevealBackgroundBrush x:Key="SystemControlHighlightAccent3RevealBackgroundBrush" TargetTheme="Light" Color="{ThemeResource SystemAccentColorLight3}" FallbackColor="{ThemeResource SystemAccentColorLight3}" />
SystemAccentColorLight3
is not updated (or its update is not propagated down to the app) when SystemAccentColor
is overriden. See for example the following XAML (with <Color x:Key="SystemAccentColor">#00CC6A</Color>
overriden on the app level):
<StackPanel Orientation="Horizontal" Margin="0,40,0,40" HorizontalAlignment="Center">
<Button Content="TreeViewItemSelectedBrush" Margin="0,0,10,0" Background="{ThemeResource SystemControlHighlightAccent3RevealBackgroundBrush}"/>
<Button Content="ListViewItemSelectedBrush" Background="{ThemeResource SystemControlHighlightListAccentLowBrush}"/>
</StackPanel>
with the result:
This particular bug for the SystemControlHighlightAccent3RevealBackgroundBrush
can only be fixed with WinUI 3. In the meantime, you can use the brushes used by the ListView as a workaround. For the TreeView specifically, WInUI could change the default brushes to the brushes used by the ListView, though there probably was a reason why those weren't chosen in the first place.
@Felix-Dev was this related (or what led) to #2913?
Bumping
Describe the bug The TreeView will only respect the OS system colour. As a developer, if I override the
SystemAccentColor
in myApp.xaml
file, the entire app should respect my new override. However, the TreeView does not respect it.Steps to reproduce the bug
Steps to reproduce the behavior:
themeBug
branch: https://github.com/dpaulino/treeviewtest/tree/themeBug#00CC6A
(light green).App.xaml
.Expected behavior The tree should respect the
SystemAccentColor
override.Screenshots
Version Info
NuGet package version: 2.1.190606001
Additional context