[Back]

SilverlightWindowControl.xaml:

<UserControl
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="SilverlightDesktopTest.SilverlightWindowControl"
    d:DesignWidth="144.03" d:DesignHeight="174.604" HorizontalAlignment="Left">
    <Canvas HorizontalAlignment="Left" Margin="0,0,134.52099609375,136" Width="144.03" VerticalAlignment="Top" d:LayoutOverrides="Width, Height" Height="174.604" x:Name="WindowControl">
        <ScrollViewer x:Name="Window" Height="549.347" Width="537.97" Canvas.Left="3.03" Canvas.Top="23" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" >
            <Image x:Name="WindowImage" Height="Auto" Source="picture.jpg" Width="Auto" Stretch="UniformToFill"/>
        </ScrollViewer>
        <Rectangle MouseLeftButtonDown="LeftSide_MouseLeftButtonDown" Cursor="SizeWE" x:Name="LeftSide" Width="3.03" Fill="#FF556BA5" Stroke="#FF000000" StrokeThickness="0" Height="570.000007629395" Canvas.Top="2.325" d:LayoutOverrides="Width"/>
        <Rectangle MouseLeftButtonDown="RightSide_MouseLeftButtonDown" x:Name="RightSide" Width="3.03" Fill="#FF556797" Stroke="#FF000000" Cursor="SizeWE" StrokeThickness="0" Height="570.000007629395" Canvas.Left="541" Canvas.Top="2.326" d:LayoutOverrides="Width"/>
        <Rectangle MouseLeftButtonDown="BottomSide_MouseLeftButtonDown" Cursor="SizeNS" Height="2.977" x:Name="BottomSide" Fill="#FF6576A5" Stroke="#FF000000" StrokeThickness="0" Width="544.03" Canvas.Top="571.627" d:LayoutOverrides="Width, Height"/>
        <Rectangle MouseLeftButtonDown="TopSide_MouseLeftButtonDown" Height="2.977" x:Name="TopSide" Fill="#FF475A8D" Stroke="#FF000000" Cursor="SizeNS" StrokeThickness="0" Width="544.03" d:LayoutOverrides="Width, Height"/>
        <StackPanel Height="20" Width="537.7" Canvas.Left="3.03" Canvas.Top="2.978" x:Name="DragStackPanel" Orientation="Horizontal">
            <Rectangle MouseLeftButtonDown="DragBar_MouseLeftButtonDown" Height="20" x:Name="DragBar" Fill="#FFA4B3E6" Stroke="#FF000000" StrokeThickness="0" Width="514.044" Cursor="Hand"/>
            <Canvas MouseLeftButtonDown="CloseButton_MouseLeftButtonDown" Height="20" x:Name="CloseButton" Width="22.568" VerticalAlignment="Top">
                <Rectangle Height="20" Width="23.905" Stroke="#FF000000" StrokeThickness="0" d:LayoutOverrides="Width">
                    <Rectangle.Fill>
                        <RadialGradientBrush>
                            <GradientStop Color="#FF06217C" Offset="0"/>
                            <GradientStop Color="#FFA4B3E6" Offset="1"/>
                        </RadialGradientBrush>
                    </Rectangle.Fill>
                </Rectangle>
                <Canvas Height="12.467" Width="3.183" Canvas.Left="10.784" Canvas.Top="3.59" d:LayoutOverrides="Width, Height">
                    <Rectangle Height="12.467" Width="3.183" RenderTransformOrigin="0.5,0.5" Fill="#FF0A0A0A" Stroke="#FF000000" d:LayoutOverrides="Width, Height">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform/>
                                <RotateTransform Angle="31.484000167846681"/>
                                <TranslateTransform/>
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>
                    <Rectangle Height="12.467" Width="3.183" Fill="#FF0A0A0A" Stroke="#FF000000" RenderTransformOrigin="0.5,0.5" d:LayoutOverrides="Width, Height">
                        <Rectangle.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform/>
                                <RotateTransform Angle="-36.589999237060546"/>
                                <TranslateTransform/>
                            </TransformGroup>
                        </Rectangle.RenderTransform>
                    </Rectangle>
                </Canvas>
            </Canvas>
        </StackPanel>
    </Canvas>
</UserControl>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Media.Imaging;

namespace SilverlightDesktopTest
{
    public partial class SilverlightWindowControl : UserControl
    {
        Point StartingDragPoint;
        string _WindowPicture;

        public string WindowPicture
        {
            set
            {
                BitmapImage objBitmapImage = new BitmapImage(new Uri(value, UriKind.Relative));
                this.WindowImage.Source = objBitmapImage;
                _WindowPicture = value;
            }

            get
            {
                return _WindowPicture;
            }
        }

        public SilverlightWindowControl()
        {
            // Required to initialize variables
            InitializeComponent();
        }

        #region Close Button
        private void CloseButton_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.WindowControl.Visibility = Visibility.Collapsed;
        }
        #endregion

        #region DragBar
        private void DragBar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Canvas objCanvas = (Canvas)this.Parent;

            //Find the highest elemnt
            int intHighestElement = 0;
            foreach (UIElement UIElement in objCanvas.Children)
            {
                int intTmpHighestElement = Canvas.GetZIndex(UIElement);
                intHighestElement = (intTmpHighestElement > intHighestElement) ? intTmpHighestElement : intHighestElement;
            }

            Canvas.SetZIndex(this, intHighestElement + 1);

            //Start Drag
            FrameworkElement DragBar = (FrameworkElement)sender;
            DragBar.CaptureMouse();

            // Set the starting point for the drag
            StartingDragPoint = e.GetPosition(DragBar);

            DragBar.MouseMove += new MouseEventHandler(DragBar_MouseMove);
            DragBar.MouseLeftButtonUp += new MouseButtonEventHandler(DragBar_MouseLeftButtonUp);
        }

        private void DragBar_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            //Stop Drag
            FrameworkElement DragBar = (FrameworkElement)sender;
            DragBar.ReleaseMouseCapture();

            DragBar.MouseMove -= new MouseEventHandler(DragBar_MouseMove);
            DragBar.MouseLeftButtonUp -= new MouseButtonEventHandler(DragBar_MouseLeftButtonUp);
        }

        private void DragBar_MouseMove(object sender, MouseEventArgs e)
        {
            Canvas Canvas = (Canvas)this.Parent;
            Point Point = e.GetPosition(Canvas);

            Canvas.SetLeft(this, Point.X - StartingDragPoint.X);
            Canvas.SetTop(this, Point.Y - StartingDragPoint.Y);
        }
        #endregion

        #region RightSide
        private void RightSide_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //Start Drag
            FrameworkElement RightSide = (FrameworkElement)sender;
            RightSide.CaptureMouse();

            // Set the starting point for the drag
            StartingDragPoint = e.GetPosition(RightSide);

            RightSide.MouseMove += new MouseEventHandler(RightSide_MouseMove);
            RightSide.MouseLeftButtonUp += new MouseButtonEventHandler(RightSide_MouseLeftButtonUp);
        }

        void RightSide_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            //Stop Drag
            FrameworkElement RightSide = (FrameworkElement)sender;
            RightSide.ReleaseMouseCapture();

            RightSide.MouseMove -= new MouseEventHandler(RightSide_MouseMove);
            RightSide.MouseLeftButtonUp -= new MouseButtonEventHandler(RightSide_MouseLeftButtonUp);
        }

        void RightSide_MouseMove(object sender, MouseEventArgs e)
        {
            Point Point = e.GetPosition(this);

            if (Point.X > (StartingDragPoint.X + 60))
            {
                this.SetValue(WidthProperty, (double)(Point.X - (StartingDragPoint.X)));
                Window.SetValue(WidthProperty, (double)(Point.X - (StartingDragPoint.X + 3)));
                DragBar.SetValue(WidthProperty, (double)(Point.X - (StartingDragPoint.X + 27)));
                DragStackPanel.SetValue(WidthProperty, (double)(Point.X - (StartingDragPoint.X + 1)));
                TopSide.SetValue(WidthProperty, (double)(Point.X - (StartingDragPoint.X - 3)));
                BottomSide.SetValue(WidthProperty, (double)(Point.X - (StartingDragPoint.X - 3)));
                Canvas.SetLeft(RightSide, Point.X - (StartingDragPoint.X));
            }
        }
        #endregion

        #region LeftSide
        private void LeftSide_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //Start Drag
            FrameworkElement LeftSide = (FrameworkElement)sender;
            LeftSide.CaptureMouse();

            // Set the starting point for the drag
            StartingDragPoint = e.GetPosition(LeftSide);
            Point ControlPoint = e.GetPosition(this);
            StartingDragPoint.X = StartingDragPoint.Y - ControlPoint.Y - .5;

            LeftSide.MouseMove += new MouseEventHandler(LeftSide_MouseMove);
            LeftSide.MouseLeftButtonUp += new MouseButtonEventHandler(LeftSide_MouseLeftButtonUp);
        }

        void LeftSide_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            //Stop Drag
            FrameworkElement LeftSide = (FrameworkElement)sender;
            LeftSide.ReleaseMouseCapture();

            LeftSide.MouseMove -= new MouseEventHandler(LeftSide_MouseMove);
            LeftSide.MouseLeftButtonUp -= new MouseButtonEventHandler(LeftSide_MouseLeftButtonUp);
        }

        void LeftSide_MouseMove(object sender, MouseEventArgs e)
        {
            Point LeftSidePoint = e.GetPosition(LeftSide);
            double PointDifference = LeftSidePoint.X - StartingDragPoint.X;

            if (LeftSidePoint.X < (Window.Width - (PointDifference) - 60))
            {
                this.SetValue(WidthProperty, (double)(PointDifference));
                Window.SetValue(WidthProperty, (double)Window.Width - (PointDifference));
                DragStackPanel.SetValue(WidthProperty, (double)DragStackPanel.Width - (PointDifference));
                DragBar.SetValue(WidthProperty, (double)DragBar.Width - (PointDifference));
                TopSide.SetValue(WidthProperty, (double)TopSide.Width - (PointDifference));
                BottomSide.SetValue(WidthProperty, (double)BottomSide.Width - (PointDifference));

                Canvas Canvas = (Canvas)this.Parent;
                Point Point = e.GetPosition(Canvas);
                Canvas.SetLeft(this, Point.X - StartingDragPoint.X);
                Canvas.SetLeft(RightSide, (double)TopSide.Width + StartingDragPoint.X);
            }
        }
        #endregion

        #region BottomSide
        private void BottomSide_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //Start Drag
            FrameworkElement BottomSide = (FrameworkElement)sender;
            BottomSide.CaptureMouse();

            // Set the starting point for the drag
            StartingDragPoint = e.GetPosition(BottomSide);

            BottomSide.MouseMove += new MouseEventHandler(BottomSide_MouseMove);
            BottomSide.MouseLeftButtonUp += new MouseButtonEventHandler(BottomSide_MouseLeftButtonUp);
        }

        void BottomSide_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            //Stop Drag
            FrameworkElement BottomSide = (FrameworkElement)sender;
            BottomSide.ReleaseMouseCapture();

            BottomSide.MouseMove -= new MouseEventHandler(BottomSide_MouseMove);
            BottomSide.MouseLeftButtonUp -= new MouseButtonEventHandler(BottomSide_MouseLeftButtonUp);
        }

        void BottomSide_MouseMove(object sender, MouseEventArgs e)
        {
            Point Point = e.GetPosition(this);

            if (Point.Y > (StartingDragPoint.Y + 60))
            {
                this.SetValue(HeightProperty, (double)(Point.Y - (StartingDragPoint.Y)));
                Window.SetValue(HeightProperty, (double)(Point.Y - (StartingDragPoint.Y)) - 22);
                LeftSide.SetValue(HeightProperty, (double)(Point.Y - (StartingDragPoint.Y)));
                RightSide.SetValue(HeightProperty, (double)(Point.Y - (StartingDragPoint.Y)));
                Canvas.SetTop(BottomSide, Point.Y - (StartingDragPoint.Y));
            }
        }
        #endregion

        #region TopSide
        private void TopSide_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //Start Drag
            FrameworkElement TopSide = (FrameworkElement)sender;
            TopSide.CaptureMouse();

            // Set the starting point for the drag
            StartingDragPoint = e.GetPosition(TopSide);
            Point ControlPoint = e.GetPosition(this);
            StartingDragPoint.Y = StartingDragPoint.X - ControlPoint.X + 1;

            TopSide.MouseMove += new MouseEventHandler(TopSide_MouseMove);
            TopSide.MouseLeftButtonUp += new MouseButtonEventHandler(TopSide_MouseLeftButtonUp);
        }

        void TopSide_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            //Stop Drag
            FrameworkElement TopSide = (FrameworkElement)sender;
            TopSide.ReleaseMouseCapture();

            TopSide.MouseMove -= new MouseEventHandler(TopSide_MouseMove);
            TopSide.MouseLeftButtonUp -= new MouseButtonEventHandler(TopSide_MouseLeftButtonUp);
        }

        void TopSide_MouseMove(object sender, MouseEventArgs e)
        {
            Point TopSidePoint = e.GetPosition(TopSide);
            double PointDifference = TopSidePoint.Y - StartingDragPoint.Y;

            if (TopSidePoint.X < (LeftSide.Height - (PointDifference) + 34))
            {
                this.SetValue(HeightProperty, (double)(PointDifference));
                Window.SetValue(HeightProperty, (double)Window.Height - (PointDifference));
                LeftSide.SetValue(HeightProperty, (double)LeftSide.Height - (PointDifference));
                RightSide.SetValue(HeightProperty, (double)RightSide.Height - (PointDifference));

                Canvas Canvas = (Canvas)this.Parent;
                Point Point = e.GetPosition(Canvas);
                Canvas.SetTop(this, Point.Y - StartingDragPoint.Y);
                Canvas.SetTop(BottomSide, (double)LeftSide.Height + StartingDragPoint.Y);
            }
        }
        #endregion

    }
}