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(); } } }
相关文章推荐
- D23_04_具有形状内容的透明窗口(自定义窗体)
- .NET重构(四):窗体继承+模板方法,完美实现组合查询
- 本文详细说明了如何建设一个自定义列表窗体模板
- .NET重构(四):窗体继承+模板方法,完美实现组合查询
- 自定义组合控件--自定义标题栏模板
- Android进阶——自定义View之重写ViewGroup组合系统控件实现自定义ToolBar模板
- D23_05_改变形状窗口的尺寸(自定义窗体大小改变)
- WinForm窗体继承自定义的模板窗体出错
- Android wiki:06.自定义组合控件属性的步骤
- D23_03_非矩形窗口 (自定义窗体)
- 继承窗体搭建组合查询模板方法的幸福之家
- 在Eclipse下配置自定义模板(原创)
- 针对RapTier模板的一点扩充[将Dt导入成自定义的Model,只需要把外部生成的DataTable进行一次映射即可.附源码]
- 自定义处理窗体的移动消息WM_MOVE
- Dottext模板自定义,让你的Blog有个性。
- 自定义窗体设计器 customformdesig [转]
- 歪酷博客自定义模板说明
- 蛙蛙推荐:ASP实现自定义标签模板
- 不规范的命名对ASP.NET中基于窗体的自定义身份验证的影响
- 一个连接数据库完整程序可以作为模板(从csdn中获得)