您的位置:首页 > 其它

D23_06_组合到一起(自定义窗体作为模板)

2014-11-02 14:40 127 查看




CustomWindow.xaml

<Window x:Class="demo.CustomWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CustomWindow" Height="300" Width="300"
Style="{StaticResource CustomWindowChrome}" Tag="This is a custom footer.">
<StackPanel Margin="10">
<TextBlock Margin="3">This is a test.</TextBlock>
<Button Margin="3" Padding="3">OK</Button>
</StackPanel>
</Window>


CustomWindowChrome.xaml(资源文件)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ControlTemplates.CustomWindowChrome">
<SolidColorBrush x:Key="WindowBackgroundBrush" Color="#FFF" />

<Style x:Key="CloseButton" TargetType="{x:Type Button}">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Canvas>
<Rectangle Width="15" Height="15" Stroke="Black" RadiusX="3" RadiusY="3">
<Rectangle.Fill>
<SolidColorBrush x:Name="myAnimatedBrush" Color="Red" />
</Rectangle.Fill>
</Rectangle>
<Line X1="3" Y1="3" X2="12" Y2="12" Stroke="White" StrokeThickness="2"></Line>
<Line X1="12" Y1="3" X2="3" Y2="12" Stroke="White" StrokeThickness="2"></Line>
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

<Style x:Key="CustomWindowChrome" TargetType="{x:Type Window}">
<Setter Property="AllowsTransparency" Value="True"></Setter>
<Setter Property="WindowStyle" Value="None"></Setter>
<Setter Property="Background" Value="Transparent"></Setter>

<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Border Width="Auto" Height="Auto" Name="windowFrame"
BorderBrush="#395984"
BorderThickness="1"
CornerRadius="0,20,30,40" >
<Border.Background>
<LinearGradientBrush >
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#E7EBF7" Offset="0.0"/>
<GradientStop Color="#CEE3FF" Offset="0.5"/>

</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>
</Border.Background>
<Grid>

<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>

<TextBlock Margin="1" Padding="5" Text="{TemplateBinding Title}" FontWeight="Bold"
MouseLeftButtonDown="titleBar_MouseLeftButtonDown"></TextBlock>
<Button Style="{StaticResource CloseButton}" HorizontalAlignment="Right" Margin="0,5,25,0"
Click="cmdClose_Click"></Button>
<Border Background="#B5CBEF" Grid.Row="1">

<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>

</Border>

<ContentPresenter Grid.Row="2" Margin="10"
HorizontalAlignment="Center"
Content="{TemplateBinding Tag}"></ContentPresenter>
<!--<TextBlock HorizontalAlignment="Center" Grid.Row="2" Text="{TemplateBinding Tag}" Margin="1,10,1,1" Padding="5"></TextBlock>-->
<ResizeGrip Name="WindowResizeGrip" Grid.Row="2" Margin="0,0,10,7"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Visibility="Collapsed"
IsTabStop="false"/>

<Rectangle Grid.Row="1" Grid.RowSpan="3"
Cursor="SizeWE" Fill="Transparent" Width="5" VerticalAlignment="Stretch" HorizontalAlignment="Right"
MouseLeftButtonDown="window_initiateResizeWE"
MouseLeftButtonUp="window_endResize"
MouseMove="window_Resize"></Rectangle>

<Rectangle Grid.Row="2"
Cursor="SizeNS" Fill="Transparent" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Bottom"
MouseLeftButtonDown="window_initiateResizeNS"
MouseLeftButtonUp="window_endResize"
MouseMove="window_Resize"></Rectangle>
</Grid>

</Border>

<ControlTemplate.Triggers>
<Trigger Property="ResizeMode" Value="CanResizeWithGrip">
<Setter TargetName="WindowResizeGrip" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>


CustomWindowChromes.cs资源文件事件处理部分类

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Shapes;

namespace ControlTemplates
{
public partial class CustomWindowChrome : ResourceDictionary
{
public CustomWindowChrome()
{
InitializeComponent();
}

private bool isResizing = false;
[Flags()]
private enum ResizeType
{
Width, Height
}
private ResizeType resizeType;

private void window_initiateResizeWE(object sender, System.Windows.Input.MouseEventArgs e)
{
isResizing = true;
resizeType = ResizeType.Width;
}
private void window_initiateResizeNS(object sender, System.Windows.Input.MouseEventArgs e)
{
isResizing = true;
resizeType = ResizeType.Height;
}

private void window_endResize(object sender, System.Windows.Input.MouseEventArgs e)
{
isResizing = false;

// Make sure capture is released.
Rectangle rect = (Rectangle)sender;
rect.ReleaseMouseCapture();
}

private void window_Resize(object sender, System.Windows.Input.MouseEventArgs e)
{
Rectangle rect = (Rectangle)sender;
Window win = (Window)rect.TemplatedParent;

if (isResizing)
{
rect.CaptureMouse();
if (resizeType == ResizeType.Width)
{
double width = e.GetPosition(win).X + 5;
if (width > 0) win.Width = width;
}
if (resizeType == ResizeType.Height)
{
double height = e.GetPosition(win).Y + 5;
if (height > 0) win.Height = height;
}
}
}

private void titleBar_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Window win = (Window)
((FrameworkElement)sender).TemplatedParent;
win.DragMove();
}

private void cmdClose_Click(object sender, RoutedEventArgs e)
{
Window win = (Window)
((FrameworkElement)sender).TemplatedParent;
win.Close();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: