Xaml 弹出按钮不会更改为黑色主题?
该弹出按钮不会将其主题从亮变暗。我不知道为什么。 请参见下面的示例代码。您可以在此处更改主题,然后弹出按钮仍保持为“灯光”主题 MainPage.xamlXaml 弹出按钮不会更改为黑色主题?,xaml,themes,uwp,appbar,flyout,Xaml,Themes,Uwp,Appbar,Flyout,该弹出按钮不会将其主题从亮变暗。我不知道为什么。 请参见下面的示例代码。您可以在此处更改主题,然后弹出按钮仍保持为“灯光”主题 MainPage.xaml <Page> <Page.BottomAppBar> <CommandBar> <AppBarButton Icon="Emoji"> <AppBarButton.Flyout>
<Page>
<Page.BottomAppBar>
<CommandBar>
<AppBarButton Icon="Emoji">
<AppBarButton.Flyout>
<Flyout/>
</AppBarButton.Flyout>
</AppBarButton>
<AppBarToggleButton Checked="Checked" Unchecked="Unchecked">
<AppBarToggleButton.Icon>
<FontIcon Glyph="" />
</AppBarToggleButton.Icon>
</AppBarToggleButton>
</CommandBar>
</Page.BottomAppBar>
</Page>
如果将内容放置在弹出型按钮中,您会发现它们适应新的ElementTheme,但是弹出型按钮演示者本身不会更改其背景
private readonly Color _darkColor = Color.FromArgb(255, 43, 43, 43);//themeresources.xaml - Default
private readonly Color _lightColor = Color.FromArgb(255, 242, 242, 242);//themeresources.xaml - Light
private void SetFlyoutBackBrush(Color color)
{
var brushKey = "FlyoutBackBrush";
if (Resources.ContainsKey(brushKey))
{
var flyoutbackBrush = Resources[brushKey] as SolidColorBrush;
if (flyoutbackBrush != null) flyoutbackBrush.Color = color;
}
}
private void Checked(object sender, RoutedEventArgs e)
{
this.RequestedTheme = ElementTheme.Dark;
SetFlyoutBackBrush(_darkColor);
}
private void Unchecked(object sender, RoutedEventArgs e)
{
this.RequestedTheme = ElementTheme.Light;
SetFlyoutBackBrush(_lightColor);
}
弹出式演示器遵循应用程序模式,在应用程序运行时,您不能在代码中更改该模式,但我有两种解决方法:
特定弹出式方法,定义
在App.Xaml资源中定义
定义FlyoutPresenterStyle并使用我们刚才在App.Xaml中定义的笔刷生成背景
<Flyout x:Name="MyFlyout">
<Flyout.FlyoutPresenterStyle>
<Style TargetType="FlyoutPresenter">
<Setter Property="Background" Value="{StaticResource FlyoutBackBrush}"/>
</Style>
</Flyout.FlyoutPresenterStyle>
<StackPanel>
<Button Content="Button"/>
<TextBlock Text="Test"/>
</StackPanel>
</Flyout>
[不推荐]通过从应用程序资源中检索SystemControlBackgroundChromeMediumLowBrush并更改其颜色值的广效方法[可行,但请阅读注释]
请注意,这将影响应用程序中的所有弹出型按钮和选择器,因为它们都使用SystemControlBackgroundChromeMediumLowBrush。我发现这个问题没有很好的解决方案,但它很简单且有效: 可以将SystemControlBackgroundChromeMediumBrush设置为弹出内容中的网格笔刷
<AppBarButton Label="Szukaj"
Icon="Find">
<AppBarButton.Flyout>
<Flyout Placement="Bottom">
<Flyout.Content>
<Grid Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}"
Margin="-15"
Padding="15"
Width="285">
<TextBox Header="Szukaj:"
Width="175"
HorizontalAlignment="Left" />
<AppBarButton Label="Szukaj"
Icon="Find"
HorizontalAlignment="Right" />
</Grid>
</Flyout.Content>
</Flyout>
</AppBarButton.Flyout>
</AppBarButton>
…请注意设置网格的边距和填充以填充弹出按钮。检查我的答案并标记它是否解决了您的问题。
private readonly Color _darkColor = Color.FromArgb(255, 43, 43, 43);//themeresources.xaml - Default
private readonly Color _lightColor = Color.FromArgb(255, 242, 242, 242);//themeresources.xaml - Light
private void SetFlyoutBackBrush(Color color)
{
var brushKey = "SystemControlBackgroundChromeMediumLowBrush";
if (Application.Current.Resources.ContainsKey(brushKey))
{
var flyoutbackBrush = Application.Current.Resources[brushKey] as SolidColorBrush;
if (flyoutbackBrush != null) flyoutbackBrush.Color = color;
}
}
private void Checked(object sender, RoutedEventArgs e)
{
this.RequestedTheme = ElementTheme.Dark;
SetFlyoutBackBrush(_darkColor);
}
private void Unchecked(object sender, RoutedEventArgs e)
{
this.RequestedTheme = ElementTheme.Light;
SetFlyoutBackBrush(_lightColor);
}
<AppBarButton Label="Szukaj"
Icon="Find">
<AppBarButton.Flyout>
<Flyout Placement="Bottom">
<Flyout.Content>
<Grid Background="{ThemeResource SystemControlBackgroundChromeMediumBrush}"
Margin="-15"
Padding="15"
Width="285">
<TextBox Header="Szukaj:"
Width="175"
HorizontalAlignment="Left" />
<AppBarButton Label="Szukaj"
Icon="Find"
HorizontalAlignment="Right" />
</Grid>
</Flyout.Content>
</Flyout>
</AppBarButton.Flyout>
</AppBarButton>