Here I got another useful behaviour for you. With this behaviour attached to any kind of panel it will resize accordingly to the user’s screen size.
I recommend you to attach it to the main panel of your application so all your app will resize.

The behaviour has a ResizeEnabled property that can be switched on or off to activate or deactivate the behaviour.


Imports System
Imports System.IO
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Input
Imports System.Windows.Interactivity

Public Class AutoResizeBehaviour
    Inherits Behavior(Of Panel)

    Public Sub New()
        '
    End Sub

    Protected Overrides Sub OnAttached()
        MyBase.OnAttached()
        AddHandler AssociatedObject.Loaded, AddressOf Panel_loaded
    End Sub

    Protected Overrides Sub OnDetaching()
        MyBase.OnDetaching()
        RemoveHandler AssociatedObject.Loaded, AddressOf Panel_loaded
    End Sub

#Region "fields"

    'resizing
    Dim _originalWidth As Double
    Dim _originalHeight As Double
    Dim _rootScaleTransform As ScaleTransform
    Dim _rootTranslateTransform As TranslateTransform
    'flag for before loading rootparentpanel
    Dim resizeEnabledBeforeLoading As Boolean
    Dim _resizeEnabled As Boolean

#End Region

#Region "properties"

    ''' <summary>
    ''' Gets or sets a value indicating whether resizing funcionality is enabled.
    ''' </summary>
    ''' <value><c>true</c> if [resize enabled]; otherwise, <c>false</c>.</value>
    Public Property ResizeEnabled() As Boolean
        Get
            Return _resizeEnabled
        End Get
        Set(ByVal value As Boolean)
            'if rootpanel is nothing resizing will not work.
            'a panel is needed as a primary element to make it work.
            'It's important to check if the rootparentpanel is nothing because we are
            'before the load event occurs
            If AssociatedObject Is Nothing Then
                resizeEnabledBeforeLoading = value
                value = False
            End If
            _resizeEnabled = value
            If value Then
                CreateResizing()
            Else
                RemoveResizing()
            End If

        End Set
    End Property

#End Region

#Region "methods"

    ''' <summary>
    ''' Recursively sets the width/height of all children to the specified value
    ''' </summary>
    ''' <param name="parentElement">Starting element</param>
    ''' <param name="width">The width to set.</param>
    ''' <param name="height">The height to set.</param>
    ''' <param name="adjustTextBlocks">true if TextBlock elements are to be centered</param>
    Public Sub RecursivelySetWidthAndHeight _
    (ByVal parentElement As FrameworkElement, ByVal width As Double, ByVal height As Double, Optional ByVal adjustTextBlocks As Boolean = True)
        'Set parent element
        parentElement.Width = width
        parentElement.Height = height
        'if adjust textblocks
        If adjustTextBlocks Then
            Dim parentTextBlock As TextBlock = TryCast(parentElement, TextBlock)
            If Not parentTextBlock Is Nothing Then
                'center the parentElement Textblock
                parentTextBlock.SetValue(Canvas.LeftProperty, (width - parentTextBlock.ActualWidth) / 2)
                parentTextBlock.SetValue(Canvas.TopProperty, (height - parentTextBlock.ActualHeight) / 2)
            End If
        End If
        'recurse throught the children
        Dim parentElementPanel As Panel = TryCast(parentElement, Panel)
        If Not parentElementPanel Is Nothing Then
            For Each childElement As FrameworkElement In parentElementPanel.Children
                RecursivelySetWidthAndHeight(childElement, width, height, adjustTextBlocks)
            Next
        End If
    End Sub

    ''' <summary>
    ''' Creates the resizing functionality.
    ''' </summary>
    Private Sub CreateResizing()
        'initializing
        _originalWidth = AssociatedObject.Width
        _originalHeight = AssociatedObject.Height
        _rootScaleTransform = New ScaleTransform
        _rootScaleTransform.ScaleX = 1
        _rootScaleTransform.ScaleY = 1
        _rootTranslateTransform = New TranslateTransform
        _rootTranslateTransform.X = 0
        _rootTranslateTransform.Y = 0
        'adding transforms to panel
        Dim t As New TransformGroup
        t.Children.Add(_rootScaleTransform)
        t.Children.Add(_rootTranslateTransform)
        AssociatedObject.RenderTransform = t
        'applying handler
        AddHandler Application.Current.Host.Content.Resized, AddressOf Content_Resized
        'resizing for first time
        Resize()
    End Sub

    ''' <summary>
    ''' Removes the resizing functionality.
    ''' </summary>
    Private Sub RemoveResizing()
        If Not AssociatedObject Is Nothing AndAlso Not AssociatedObject.RenderTransform Is Nothing Then
            Try
                Dim sctrans As ScaleTransform = CType(AssociatedObject.RenderTransform, TransformGroup).Children(0)
                Dim tstrans As TranslateTransform = CType(AssociatedObject.RenderTransform, TransformGroup).Children(1)
                sctrans.ScaleX = 1
                sctrans.ScaleY = 1
                tstrans.X = 0
                tstrans.Y = 0
                AssociatedObject.RenderTransform = Nothing
            Catch ex As Exception
                '
            End Try
        End If
        RemoveHandler Application.Current.Host.Content.Resized, AddressOf Content_Resized
    End Sub

    ''' <summary>
    ''' Resizes this instance.
    ''' </summary>
    Private Sub Resize()
        Dim currentWidth As Double = Application.Current.Host.Content.ActualWidth
        Dim currentHeight As Double = Application.Current.Host.Content.ActualHeight
        'Scale the root panel to fit within the current control size
        Dim uniformScaleAmount As Double = Math.Min((currentWidth / _originalWidth), (currentHeight / _originalHeight))
        _rootScaleTransform.ScaleX = uniformScaleAmount
        _rootScaleTransform.ScaleY = uniformScaleAmount * 0.9
        'Translate the root panel to center horizontally
        Dim scaledWidth As Double = Math.Min(_originalWidth * _rootScaleTransform.ScaleX, currentWidth)
        Dim scaledHeight As Double = Math.Min(_originalHeight * _rootScaleTransform.ScaleY, currentHeight)
        _rootTranslateTransform.X = (Math.Min(AssociatedObject.ActualWidth, currentWidth) - scaledWidth) / 2D
        _rootTranslateTransform.Y = (Math.Min(AssociatedObject.ActualHeight, currentHeight) - scaledHeight) / 2D
    End Sub

#End Region

#Region "handlers"

    ''' <summary>
    ''' Handles the Loaded event of the panel.
    ''' </summary>
    ''' <param name="sender">The source of the event.</param>
    ''' <param name="e">The <see cref="System.Windows.RoutedEventArgs" /> instance containing the event data.</param>
    Private Sub Panel_loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
        ResizeEnabled = resizeEnabledBeforeLoading
    End Sub

    ''' <summary>
    ''' Handles the Resized event of the Content control.
    ''' </summary>
    ''' <param name="sender">The source of the event.</param>
    ''' <param name="e">The <see cref="System.EventArgs" /> instance containing the event data.</param>
    Private Sub Content_Resized(ByVal sender As Object, ByVal e As EventArgs)
        Resize()
    End Sub

#End Region

End Class