xaml - 当主题在运行时更改时,ProgressRing 不显示
问题描述
我正在开发一个 UWP 应用程序。我使用 ProgressRing 如下代码:
<ListViewItem Template="{ThemeResource SeetingsListItemContentThemeStyle}"
BorderBrush="{ThemeResource SettingsListItemBorderThemeColor}"
BorderThickness="0,0,0,1"
AutomationProperties.SizeOfSet="0"
AutomationProperties.Name="{Binding SettingsAutomationText, Mode=OneWay}">
<ProgressRing VerticalAlignment="Center"
Margin="18, 0, 0, 14"
Height="21"
Width="21"
IsActive="True"
Foreground="Red"
Visibility="Visible"/>
</ListViewItem>
“SeetingsListItemContentThemeStyle”如下:
对于轻主题:
<ControlTemplate x:Key="SeetingsListItemContentThemeStyle" TargetType="ListViewItem">
<ListViewItemPresenter x:Name="Root"
CheckBrush="{ThemeResource ListViewItemCheckBrush}"
ContentMargin="{TemplateBinding Padding}"
CheckBoxBrush="{ThemeResource ListViewItemCheckBoxBrush}"
CheckMode="{ThemeResource ListViewItemCheckMode}"
FocusBorderBrush="{ThemeResource ListViewItemFocusBorderBrush}"
FocusSecondaryBorderBrush="{ThemeResource ListViewItemFocusSecondaryBorderBrush}"
HorizontalContentAlignment="Left"
Control.IsTemplateFocusTarget="False"
PressedBackground="#12000000"
PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackground}"
PointerOverBackground="#08000000"
SelectionCheckMarkVisualEnabled="{ThemeResource ListViewItemSelectionCheckMarkVisualEnabled}"
SelectedPressedBackground="#12000000"
SelectedPointerOverBackground="#08000000"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}">
</ListViewItemPresenter>
</ControlTemplate>
对于黑暗主题:
<ControlTemplate x:Key="SeetingsListItemContentThemeStyle" TargetType="ListViewItem">
<ListViewItemPresenter x:Name="Root"
CheckBrush="{ThemeResource ListViewItemCheckBrush}"
ContentMargin="{TemplateBinding Padding}"
CheckBoxBrush="{ThemeResource ListViewItemCheckBoxBrush}"
CheckMode="{ThemeResource ListViewItemCheckMode}"
FocusBorderBrush="{ThemeResource ListViewItemFocusBorderBrush}"
FocusSecondaryBorderBrush="{ThemeResource ListViewItemFocusSecondaryBorderBrush}"
HorizontalContentAlignment="Left"
Control.IsTemplateFocusTarget="False"
PressedBackground="#12ffffff"
PlaceholderBackground="{ThemeResource ListViewItemPlaceholderBackground}"
PointerOverBackground="#08ffffff"
SelectionCheckMarkVisualEnabled="{ThemeResource ListViewItemSelectionCheckMarkVisualEnabled}"
SelectedPressedBackground="#12ffffff"
SelectedPointerOverBackground="#08ffffff"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}">
</ListViewItemPresenter>
</ControlTemplate>
父页面加载时进度环正确显示。但是当我从系统更改主题时它没有显示。一旦出现此问题,进度环不会显示为 Light-Dark 两个主题。如果我返回一些其他页面并再次返回此页面,则此时间进度环显示正确。
在应用程序运行时更改主题后,任何人都可以帮助我正确工作进度环吗?
解决方案
当主题在运行时更改时,ProgressRing 不显示
我认为问题是ProgressRing
当您通过更新当前系统主题更改 ListViewItem 的 ControlTemplate 时,环形动画被破坏。对于这种情况,您可以在主题更改后重新加载当前页面以重建此动画。
private void Button_Click(object sender, RoutedEventArgs e)
{
Reload();
}
public bool Reload() { return Reload(null); }
private bool Reload(object param)
{
Type type = this.Frame.CurrentSourcePageType;
if (this.Frame.BackStack.Any())
{
type = this.Frame.BackStack.Last().SourcePageType;
param = this.Frame.BackStack.Last().Parameter;
}
try { return this.Frame.Navigate(type, param); }
finally { this.Frame.BackStack.Remove(this.Frame.BackStack.Last()); }
}
用法
public MainPage()
{
this.InitializeComponent();
var Listener = new ThemeListener();
Listener.ThemeChanged += Listener_ThemeChanged;
}
private void Listener_ThemeChanged(ThemeListener sender)
{
Reload();
}
推荐阅读
- scala - 如何将 sbt-protoc 和 scalapb 与 sbt 交叉构建集成?
- h.264 - 如何使用 Live555 RTSPServer 指定帧率?
- c# - 控件显示在设计器视图中,但调试时某些控件未显示在 android 设备中?
- javascript - Javascript 替换包含文档注释的代码行
- c# - iText 7 - 提取区域中的确切单词
- python - 如何在 tkinter 中重新排列设置日期
- python - Robot Framework Webdriver Manager - 使用其他关键字执行时无法获取驱动程序路径
- html - 如何在文本末尾显示下划线?
- mongodb - MongoDB 从 2 个子文档计算字段并生成新文档
- javascript - Axios fetch 后根据响应数据做计数器