C# 流畅的丙烯刷不会在明暗、主题等之间切换。UWP

C# 流畅的丙烯刷不会在明暗、主题等之间切换。UWP,c#,xaml,uwp,windows-template-studio,C#,Xaml,Uwp,Windows Template Studio,定义了灯光主题(),我在ShellPage.xaml中添加了以下内容。当我在灯光主题和黑暗主题之间切换时,预期的行为是应用程序NavigationView控件将具有在红色和橙色之间切换的AcryicBrush色调。在下面的定义中,实际行为是它保持橙色 ShellPage.xaml: <Page.Resources> <StaticResource x:Key="NavigationViewExpandedPaneBackground"

定义了灯光主题(
),我在ShellPage.xaml中添加了以下内容。当我在灯光主题和黑暗主题之间切换时,预期的行为是应用程序
NavigationView
控件将具有在红色和橙色之间切换的
AcryicBrush
色调。在下面的定义中,实际行为是它保持橙色

ShellPage.xaml:

<Page.Resources>
    <StaticResource  x:Key="NavigationViewExpandedPaneBackground"
                     ResourceKey="MyAcrylicBrush"/>
</Page.Resources>

App.xaml:

<Application
x:Class="TEST.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Default">
                <AcrylicBrush x:Key="MyAcrylicBrush"
                              BackgroundSource="HostBackdrop"
                              TintColor="Green"
                              TintOpacity="0.8" />
                <AcrylicBrush x:Key="NavigationViewDefaultPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Green"
                              TintOpacity="0.8" />
                <AcrylicBrush x:Key="NavigationViewTopPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Green"
                              TintOpacity="0.8" />
                <AcrylicBrush x:Key="NavigationViewExpandedPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Green"
                              TintOpacity="0.8" />
            </ResourceDictionary>
            <ResourceDictionary x:Key="Dark">
                <AcrylicBrush x:Key="MyAcrylicBrush"
                              BackgroundSource="HostBackdrop"
                              TintColor="Orange"
                              TintOpacity="0.8" />
                <AcrylicBrush x:Key="NavigationViewDefaultPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Orange"
                              TintOpacity="0.8" />
                <AcrylicBrush x:Key="NavigationViewTopPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Orange"
                              TintOpacity="0.8" />
                <AcrylicBrush x:Key="NavigationViewExpandedPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Orange"
                              TintOpacity="0.8" />
            </ResourceDictionary>
            <ResourceDictionary x:Key="Light">
                <AcrylicBrush x:Key="MyAcrylicBrush"
                              BackgroundSource="HostBackdrop"
                              TintColor="Red"
                              TintOpacity="1"/>
                <AcrylicBrush x:Key="NavigationViewDefaultPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Red"
                              TintOpacity="1" />
                <AcrylicBrush x:Key="NavigationViewTopPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Red"
                              TintOpacity="1" />
                <AcrylicBrush x:Key="NavigationViewExpandedPaneBackground"
                              BackgroundSource="HostBackdrop"
                              TintColor="Red"
                              TintOpacity="1"/> 
            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Application.Resources>
</Application>

您可以直接将钥匙(NavigationViewExpandedPaneBackGround)交给您的AcrylicBrush。因此,它将更改您的导航视图背景

  <Page.Resources>
      <ResourceDictionary>
            <ResourceDictionary.ThemeDictionaries>
                <ResourceDictionary x:Key="Light">
                    <AcrylicBrush x:Key="NavigationViewExpandedPaneBackground" BackgroundSource="HostBackdrop" TintColor="{ThemeResource SystemAccentColorDark1}" FallbackColor="{ThemeResource SystemAccentColorDark1}" TintOpacity="0.80"/>   
                </ResourceDictionary>
                <ResourceDictionary x:Key="Dark">
                    <AcrylicBrush x:Key="NavigationViewExpandedPaneBackground" BackgroundSource="HostBackdrop" TintColor="{ThemeResource SystemAltHighColor}" FallbackColor="#333333" TintOpacity="0.50"/>
                </ResourceDictionary>
            </ResourceDictionary.ThemeDictionaries>
        </ResourceDictionary>
</Page.Resources>


希望这能解决您的问题。

您可以直接将钥匙(NavigationViewExpandedPaneBackGround)交给您的AcrylicBrush。这样它将更改您的导航视图背景

  <Page.Resources>
      <ResourceDictionary>
            <ResourceDictionary.ThemeDictionaries>
                <ResourceDictionary x:Key="Light">
                    <AcrylicBrush x:Key="NavigationViewExpandedPaneBackground" BackgroundSource="HostBackdrop" TintColor="{ThemeResource SystemAccentColorDark1}" FallbackColor="{ThemeResource SystemAccentColorDark1}" TintOpacity="0.80"/>   
                </ResourceDictionary>
                <ResourceDictionary x:Key="Dark">
                    <AcrylicBrush x:Key="NavigationViewExpandedPaneBackground" BackgroundSource="HostBackdrop" TintColor="{ThemeResource SystemAltHighColor}" FallbackColor="#333333" TintOpacity="0.50"/>
                </ResourceDictionary>
            </ResourceDictionary.ThemeDictionaries>
        </ResourceDictionary>
</Page.Resources>


希望这能解决您的问题。

如果您使用
StaticResource
,它会使画笔从第一次评估时就保留下来。但是,您根本不必在
ShellPage
上提供资源,而
App.xaml
中的内容就足够了-您有一个名为
NavigationViewExpandedPaneBackground的画笔e> 这个笔刷应该自动覆盖
NavigationPane
默认设置(链接问题专门讨论了资源名称与内置名称不同的情况)。此外,它应该根据当前主题工作,因为它是主题词典的一部分

尝试从
ShellPage
中删除
元素,看看它是否解决了问题

我测试了这个变化,它工作正常

轻主题

黑暗主题


如果您使用
StaticResource
,它将使画笔从第一次评估时就可以使用。但是,您根本不必在
ShellPage
上提供资源,并且您在
App.xaml
中拥有的内容就足够了-您有一个名为
NavigationViewExpandedPaneBackground
的画笔uld自动覆盖
NavigationPane
默认设置(链接问题专门讨论了资源名称与内置名称不同的情况)。此外,它应该根据当前主题工作,因为它是主题词典的一部分

尝试从
ShellPage
中删除
元素,看看它是否解决了问题

我测试了这个变化,它工作正常

轻主题

黑暗主题


正是更改导致了此异常。
Windows.UI.Xaml.Markup.XamlParseException:“Xaml解析失败”。
我将编辑我的答案,因为您希望将丙烯酸刷应用于导航视图窗格。这似乎允许我解决此问题。但是,Microsoft团队似乎并不打算这样做。谢谢@VigneshChanging正是这一点给了我这个异常。
Windows.UI.Xaml.Markup.XamlParseException:“Xaml解析失败”。
我将编辑我的答案,因为您希望将丙烯酸刷应用到导航视图窗格。这似乎允许我解决这个问题。但是,这似乎不是Microsoft团队想要的。谢谢@vigneshun幸运的是,丙烯画笔的效果已经消失。在应用程序的全屏模式下,
NavigationView
没有透明度。你不能使用
TintOpacity
设置为1。这会使色调完全不透明。尝试使用类似于0.5的东西,你肯定会看透。我应该提到我有TintOpacity一直降到“0.1”,甚至先降到“0.01”——这就是我发现有些东西坏了的原因。我把它调到了“1”因此,在明暗之间切换是显而易见的。奇怪的是,你在XAML中绑定的
MyAcrylicBrush
在哪里?我根本没有使用MyAcrylicBrush。我只是让App.XAML的内容与你一样,但从未使用MyAcrylicBrush,只有我在回答中提到的默认名称的笔刷:-)得到了它。你是17763还是17134?你所说的基本上让我回到了原点——问题的起源。我同意它应该可以工作,但它不包括
NavigationView
控件。我看到所有其他控件都在亮/暗之间切换。不幸的是,丙烯画笔的效果已经失去了。在应用程序的全屏模式下,
NavigationView
没有透明度。您不能将
TintOpacity
设置为1。这使色调完全不透明。试着使用0.5这样的东西,你肯定会看穿的。我应该提到,我的透明度一直下降到“0.1”,甚至是“0.01”——这就是我发现问题的原因。我把它调高到“1”,所以在亮/暗之间切换是显而易见的。好奇的是,你在XAML中绑定的
MyAcrylicBrush
在哪里?我根本没有使用MyAcrylicBrush。我只是让App.xaml的内容与您的一样,但从未使用MyAcrylicBrush,只有我在回答中提到的默认名称的笔刷:-)得到了它。你是17763还是17134?你所说的基本上让我回到了原点——问题的起源。我同意它应该可以工作,但它不包括
NavigationView
控件。我看到所有其他控件都在亮/暗之间切换。