更改操作系统主题时,应用程序通常不会显示所有条目。我尝试更改条目的背景,但是框架在 iOS 上不可见,如果它是空的(没有占位符),那么将很难找到它。 将
Application.Current.UserAppTheme = AppTheme.Light
添加到 App.xaml.cs
文件中。
iOS 和 Android 均存在该问题。
响应系统主题更改的一种简单方法是使用 AppThemeBinding 标记扩展。
<Entry BackgroundColor="{AppThemeBinding Light=Green, Dark=Yellow}"/>
或者您可以使用样式:
<Style TargetType="Entry" x:Key="EntryStyle">
<Setter Property="BackgroundColor"
Value="{AppThemeBinding Light={StaticResource LightNavigationBarColor}, Dark={StaticResource DarkNavigationBarColor}}" />
</Style>
更多信息可以参考响应系统主题变更
事实证明,问题是我使用了一个自定义条目,其中没有指定背景颜色,将其设置为透明后,该条目显示正常,除了周围没有框架(ios)和下划线(安卓)。到目前为止,我只是将唱片包裹在
border
中,它就可以工作了。
我暂时保留这个问题,也许有人会找到更优雅的解决方案
更新: 我偶然发现了这篇文章,尝试这种方法后,我不再遇到黑暗主题https://learn.microsoft.com/en-us/answers/questions/231994/disable-dark-mode-in-xamarin-forms -4-8
我正在使用.NET8(maui.net应用程序)和VS2022 17.12.0预览版5.0(11/2024);和 当我在代码中设置“Microsoft.Maui.Controls.Application.Current.UserAppTheme=Dark|Light|unspecified”时,“Entry”控件不会动态更改颜色,这样应用程序将不会响应“Dark”中的 Android 设置更改模式“开”或“关”。 在这种情况下,我尝试将页面设置为“瞬态”,但没有成功。 Entry 控件的 TextColor 属性不会自动更改(更改由“Resources\Styles\Style.xaml”中的 Style 元素控制)
<Style TargetType="Entry">
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
<Setter Property="BackgroundColor" Value="Transparent" />
<Setter Property="FontFamily" Value="OpenSansRegular"/>
<Setter Property="FontSize" Value="14" />
<Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
<Setter Property="MinimumHeightRequest" Value="44"/>
<Setter Property="MinimumWidthRequest" Value="44"/>
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
这对我有用,在代码中创建一个新的“页面”。
//in this way the Entry control do not changes the "TextColor" dynamically
//Shell.Current.GoToAsync("//SettingPage");
var setPage = new SettingPage(viewController);
await Navigation.PushAsync(setPage); //OK