加载新资源文件后强制UI重绘

时间:2014-01-08 14:28:09

标签: vb.net silverlight xaml

我已经定义了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()

我知道资源文件已正确加载,因为当我进入控件时属性已更新

0 个答案:

没有答案