我已经定义了2个主题(包含颜色的资源文件 - .xaml),一个在应用程序加载的资源字典中,另一个在按钮上添加了以下代码:
Application.Current.Resources.MergedDictionaries.Clear()
Dim lightTheme As New ResourceDictionary()
Dim lightThemeUri As New Uri("/MyApp.UI;component/Assets/ColourResourcesLight.xaml", UriKind.Relative)
lightTheme.Source = lightThemeUri
Application.Current.Resources.MergedDictionaries.Add(lightTheme)
新灯光主题中的颜色使用与暗主题相同的键定义(加载应用时加载)。然后我的控件使用staticResource绑定到此键。
在加载新资源文件后,我想以某种方式更新/强制重绘整个UI以允许我的新主题显示。这适用于我随后导航到的页面中包含的控件,但它不会更新我的导航栏(主页面)。每个其他页面都加载到主页面上的容器中。
我希望导航栏也能更新。
想知道最好的方法是什么,我尝试使用以下方法更新绑定:
Public Shared Sub ForceControlRebind(cntrl As Control, depprop As DependencyProperty)
Try
Dim BindExp As BindingExpression = cntrl.GetBindingExpression(depprop)
Dim Bind As Binding = BindExp.ParentBinding
cntrl.SetBinding(depprop, Bind)
Catch generatedExceptionName As Exception
Throw
End Try
End Sub
然而,BindExp总是不返回任何内容。
我还尝试使用以下方法强制进行UI重绘:
mainpage.InvalidateMeasure()
mainpage.InvalidateArrange()
mainpage.UpdateLayout()
我知道资源文件已正确加载,因为当我进入控件时属性已更新