Click here to Skip to main content
15,885,877 members
Articles / Programming Languages / C#

FloatingWindow - Multi-windows Interface for Silverlight 4

Rate me:
Please Sign up or sign in to vote.
4.92/5 (80 votes)
16 May 2011CPOL8 min read 504.4K   3.9K   123  
Resizable windows simulating multi-windows desktop interface for Silverlight 4
<UserControl x:Class="FloatingWindowControl.MainPage"
	xmlns:my="clr-namespace:SilverFlow.Controls;assembly=SilverFlow.Controls"  
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
	xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
	
	<UserControl.Resources>
		<Style x:Key="LinkStyle" TargetType="HyperlinkButton">
			<Setter Property="IsTabStop" Value="false"/>
			<Setter Property="Foreground" Value="#FFE5EFFF" />
			<Setter Property="Margin" Value="0,2,0,0" />
		</Style>
	</UserControl.Resources>

	<Grid>
		<Grid.RowDefinitions>
			<RowDefinition Height="Auto"/>
			<RowDefinition Height="*"/>
		</Grid.RowDefinitions>
		<Border x:Name="brTop" Grid.Row="0" BorderBrush="White" BorderThickness="0,0,0,1" Height="30">
			<Border.Background>
				<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
					<GradientStop Color="White" Offset="0.299"/>
					<GradientStop Color="#FFC1C9CD" Offset="0.979"/>
				</LinearGradientBrush>
			</Border.Background>
			<TextBlock Margin="12,0,0,0" Text="FloatingWindow v1.2.1" FontSize="12" 
				VerticalAlignment="Center" HorizontalAlignment="Left" FontWeight="Bold">
				<TextBlock.Effect>
					<DropShadowEffect Color="White" BlurRadius="1" ShadowDepth="1"/>
				</TextBlock.Effect>
				<TextBlock.Foreground>
					<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
						<GradientStop Color="#FFB292DA"/>
						<GradientStop Color="#FF292929" Offset="1"/>
					</LinearGradientBrush>
				</TextBlock.Foreground>
			</TextBlock>
        </Border>	
	    <Grid x:Name="MainPageLayoutRoot" Grid.Row="1" >
			<Grid.ColumnDefinitions>
				<ColumnDefinition Width="160" MinWidth="160" />
				<ColumnDefinition Width="4"/>
				<ColumnDefinition Width="*"/>
			</Grid.ColumnDefinitions>
			<sdk:GridSplitter Grid.Column="1" HorizontalAlignment="Left" Grid.RowSpan="2" Background="#FFBACBFF"/>
			<Border x:Name="brLeft" Padding="10,20,0,0">
				<Border.Background>
					<LinearGradientBrush EndPoint="0.962,0.978" StartPoint="0.081,0.039">
						<GradientStop Color="#FF26272B" Offset="1"/>
						<GradientStop Color="#FF6E707A"/>
						<GradientStop Color="#FF343F4E" Offset="0.474"/>
					</LinearGradientBrush>
				</Border.Background>
	            <Grid>
	                <Grid.RowDefinitions>
	                    <RowDefinition />
	                    <RowDefinition Height="Auto" />
	                </Grid.RowDefinitions>
	                <StackPanel HorizontalAlignment="Left">
	                    <TextBlock Text="Open window" Foreground="White" Margin="0,0,0,5" FontWeight="Bold" />
						<Border Margin="10,0,0,0">
							<StackPanel HorizontalAlignment="Left">
	                    		<HyperlinkButton Content="New Window" Click="ShowNewWindow_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="City Population" Click="ShowPopulation_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="Details Form" Click="ShowDetailsForm_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="Window with Icon" Click="ShowWindowWithIcon_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="Window with Chart" Click="ShowWindowWithChart_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="Modal Window" Click="ShowModalWindow_Click" Style="{StaticResource LinkStyle}" />							
							</StackPanel>
						</Border>
						<TextBlock Text="Other actions" Foreground="White" Margin="0,20,0,5" FontWeight="Bold" />
						<Border Margin="10,0,0,0">
							<StackPanel HorizontalAlignment="Left">
	                    		<HyperlinkButton Content="Show ChildWindow" Click="ShowChildWindow_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="Show Iconbar" Click="ShowIconbar_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="Hide Iconbar" Click="HideIconbar_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="Close all windows" Click="CloseWindows_Click" Style="{StaticResource LinkStyle}" />
	                    		<HyperlinkButton Content="Download source code" Foreground="#FFFFD0D0" Margin="0,10,0,0" IsTabStop="False" FontStyle="Italic" 
	                                     NavigateUri="http://jevgenijpankov.heliocode.com/downloads/FloatingWindowControl.zip" />
							</StackPanel>
						</Border>
	                    <TextBlock Text="Settings" Foreground="White" Margin="0,20,0,0" FontWeight="Bold" />
	                    <CheckBox Content="Show minimized only" Name="cbxShowMinimized" Margin="0,5,0,2" IsChecked="False" HorizontalAlignment="Left" Foreground="#FFD0D0D0" />
	                    <CheckBox Content="Enable Snapin" Name="cbxEnableSnapin" Margin="0,5,0,5" IsChecked="True" HorizontalAlignment="Left" Foreground="#FFD0D0D0" />
	                    <Grid>
	                        <Grid.RowDefinitions>
	                            <RowDefinition />
	                            <RowDefinition />
	                        </Grid.RowDefinitions>
	                        <Grid.ColumnDefinitions>
	                            <ColumnDefinition Width="Auto" />
	                            <ColumnDefinition Width="Auto" />
	                        </Grid.ColumnDefinitions>
	                        <TextBlock VerticalAlignment="Center" Grid.Row="0" Grid.Column="0" Margin="2,0,10,0" Foreground="#FFD0D0D0">Snapin Distance</TextBlock>
	                        <TextBox Name="txtSnapinDistance" Grid.Column="1" Width="25" MaxLength="2" Text="5" Background="WhiteSmoke" Margin="1" Height="22" />
	                        <TextBlock VerticalAlignment="Center" Grid.Row="1" Grid.Column="0" Margin="2,0,10,0" Foreground="#FFD0D0D0">Snapin Margin</TextBlock>
	                        <TextBox Name="txtSnapinMargin" Grid.Row="1" Grid.Column="1" Width="25" MaxLength="2" Text="0" Background="WhiteSmoke" Margin="1" Height="22" />
	                    </Grid>
	                </StackPanel>
	                <HyperlinkButton VerticalAlignment="Bottom" Grid.Row="1" Content="Jevgenij Pankov" Foreground="#FFFFD0D0" Margin="0,0,0,10" IsTabStop="False" FontStyle="Italic" 
	                                 NavigateUri="http://jevgenijpankov.heliocode.com/" TargetName="_blank">
	                    <HyperlinkButton.Effect>
	                        <DropShadowEffect Opacity="0.4" ShadowDepth="3" BlurRadius="4"/>
	                    </HyperlinkButton.Effect>
	                </HyperlinkButton>
	            </Grid>
	        </Border>
	        <my:FloatingWindowHost x:Name="host" Grid.Column="2" MinWidth="100"
	                               SnapinEnabled="{Binding ElementName=cbxEnableSnapin, Path=IsChecked}"
	                               SnapinDistance="{Binding ElementName=txtSnapinDistance, Path=Text}"
	                               SnapinMargin="{Binding ElementName=txtSnapinMargin, Path=Text}"
	                               ShowMinimizedOnlyInIconbar="{Binding ElementName=cbxShowMinimized, Path=IsChecked}">
				<my:FloatingWindowHost.Background>
					<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
						<GradientStop Color="#FF7FD7F8" Offset="1"/>
						<GradientStop Color="#FF00AFF0"/>
					</LinearGradientBrush>
				</my:FloatingWindowHost.Background>
			</my:FloatingWindowHost>
		</Grid>
	</Grid>
</UserControl>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Latvia Latvia
Jevgenij lives in Riga, Latvia. He started his programmer's career in 1983 developing software for radio equipment CAD systems. Created computer graphics for TV. Developed Internet credit card processing systems for banks.
Now he is System Analyst in Accenture.

Comments and Discussions