Saturday, April 28, 2012

Custom Themes In Silverlight

Silverlight Custom theme making is easy way using app.xml. Below code for change the theme in silverlight application dynamically. Also We can make it save into local machine for next time.
Preview:


Below the code for change style of button dynamically.

AddHandler element.MouseEnter, Sub(i, j)
                                                 i.Style = Application.Current.Resources("MouseHoverStyle")
                                             End Sub

AddHandler element.MouseLeave, Sub(i, j)                                               
                                                     i.Style = Application.Current.Resources("MouseLeaveStyle")   
                                             End Sub


We can change the APP.xaml Resources too. here the Steps below:
1) Prepare the styles called as Red,blue,green..etc
2) Then Change App Styles Dynamically here the code below.
VB Code:

  Public Sub LoadResourceDictionary(xamlTheme As String)
        xamlTheme = "/app-path;component/Assets/" & xamlTheme & ".xaml"
        If String.IsNullOrEmpty(xamlTheme) Then
            Return
        End If
        Try
            Application.Current.Resources.MergedDictionaries.Clear()
            Dim resource As New ResourceDictionary
            resource.Source = New Uri(xamlTheme, UriKind.Relative)
            Application.Current.Resources.MergedDictionaries.Add(resource)

            '/* Master Page elements is not Affected Dynamically*/
            Dim Page As MainPage = DirectCast(App.Current.RootVisual, MainPage)
            Page.MainBlock.Style = App.Current.Resources("LayoutRootGridStyle")
            Page.SliderMenu.Style = App.Current.Resources("Slidermenubackcolor")
            Page.ContentBorder.Style = App.Current.Resources("MainContentBackground")
            Page.MenuBlock.Style = App.Current.Resources("Loginmenubackcolor")
            Page.loginBlock.Style = App.Current.Resources("Loginmenubackcolor")
            Page.pathleft.Template = App.Current.Resources("ButtonArrowLeft")
            Page.pathright.Template = App.Current.Resources("ButtonArrowRight")
            Slidermenubackcolor1.Style = App.Current.Resources("Slidermenubackcolor")
            Slidermenubackcolor.Style = App.Current.Resources("Slidermenubackcolor")
            ContentSubBorder.Style = App.Current.Resources("ContentBorder")

            '/* Theme save in local path */
            Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

            If Not Directory.Exists(path & "\app-path") Then
                Directory.CreateDirectory(path & "\app-path")
            End If
            If File.Exists(path & "\app-path\Setting.txt") Then
                File.Delete(path & "\app-path\Setting.txt")
            End If

            Dim sr As StreamWriter = New StreamWriter(File.Open(path & "\app-path\Setting.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
            sr.WriteLine(xamlTheme)
            sr.Close()
            sr = Nothing
        Catch ex As Exception
            MessageBox.Show("Failed to load the theme " & vbLf + ex.Message)
        End Try
    End Sub



3) Prepare some simple border and Call while mouse event
    Private Sub rectred_MouseLeftButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles red.MouseLeftButtonUp
        LoadResourceDictionary("Red")
    End Sub

    Private Sub rectblue_MouseLeftButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Blue.MouseLeftButtonUp
        LoadResourceDictionary("Blue")
    End Sub



No comments:

Post a Comment