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

image

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();
        }
    }
}
posted @ 2014-11-02 14:40  xiepengtest  阅读(158)  评论(0编辑  收藏  举报