zoukankan      html  css  js  c++  java
  • 自定义窗体,简简单单实现

    style文件xmal:

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
        <ControlTemplate x:Key="WindowTemplateKey" TargetType="{x:Type Window}">
            <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                <Grid>
                    <AdornerDecorator>
                        <ContentPresenter />
                    </AdornerDecorator>
                    <ResizeGrip x:Name="WindowResizeGrip" Visibility="Collapsed" IsTabStop="false" HorizontalAlignment="Right" VerticalAlignment="Bottom" />
                </Grid>
            </Border>
            <ControlTemplate.Triggers>
                <MultiTrigger>
                    <MultiTrigger.Conditions>
                        <Condition Property="ResizeMode" Value="CanResizeWithGrip" />
                        <Condition Property="WindowState" Value="Normal" />
                    </MultiTrigger.Conditions>
                    <Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible" />
                </MultiTrigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
        <ControlTemplate x:Key="BaseWindowControlTemplate" TargetType="{x:Type Window}">
            <DockPanel LastChildFill="True">
                <!--外边框-->
                <Border x:Name="borderTitle" DockPanel.Dock="Top" Height="30" BorderBrush="#FFA9A9A9" BorderThickness="0,0,2,0">
                    <Border BorderBrush="#FF494949" BorderThickness="1,1,1,0">
                        <Border.Background>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FFF4F4F4" Offset="0"/>
                                <GradientStop Color="#FFEBEBEB" Offset="1"/>
                            </LinearGradientBrush>
                        </Border.Background>
                        <Grid>
                            <TextBlock x:Name="Title" VerticalAlignment="Center" Margin="20,0,0,0"></TextBlock>
                            <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
                                <!--最小化按钮-->
                                <Button x:Name="btnMin" Margin="2,4,0,4" Height="20" Width="30" Style="{DynamicResource HomeBtnStyle}">
                                    <Image Source="/WisHotel;component/Images/HomePageImages/最小化图标.png" Height="18" Width="18" SnapsToDevicePixels="True"/>
                                </Button>
                                <!--最大化按钮-->
                                <Button x:Name="btnMax" Margin="2,4,0,4" Height="20" Width="30" Style="{DynamicResource HomeBtnStyle}">
                                    <Image Source="/WisHotel;component/Images/HomePageImages/窗口图标.png" Height="18" Width="18"/>
                                </Button>
                                <!--关闭按钮-->
                                <Button x:Name="btnClose" Margin="2,4,10,4" Height="20" Width="30" Style="{DynamicResource HomeBtnStyle}">
                                    <Image Source="/WisHotel;component/Images/HomePageImages/关闭图标.png" Height="18" Width="18"/>
                                </Button>
                            </StackPanel>
                        </Grid>
                    </Border>
                </Border>
                <Border BorderBrush="#FFA9A9A9" BorderThickness="0,0,2,2">
                    <Border BorderBrush="#FF494949" Background="#FFEBEBEB" BorderThickness="1,0,1,1">
                        <Border BorderBrush="#FFEBEBEB" BorderThickness="2,1">
                            <Border BorderBrush="#FF494949" BorderThickness="1">
                                <Border Background="White">
                                    <AdornerDecorator>
                                        <ContentPresenter />
                                    </AdornerDecorator>
                                </Border>
                            </Border>
                        </Border>
                    </Border>
                </Border>
            </DockPanel>
        </ControlTemplate>
        <Style x:Key="BaseWindowStyle" TargetType="{x:Type Window}">
            <Setter Property="Template" Value="{StaticResource BaseWindowControlTemplate}"/>
            <Setter Property="AllowsTransparency" Value="True" />
            <Setter Property="WindowStyle" Value="None" />
            <Style.Triggers>
                <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
                    <Setter Property="Template" Value="{StaticResource WindowTemplateKey}" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ResourceDictionary>

    继承类cs:

    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    
    namespace WisHotel.Common
    {
        public class BaseWindow : Window
        {
            public BaseWindow()
            {
                //居中显示
                WindowStartupLocation = WindowStartupLocation.CenterScreen;
                //初始化样式
                this.Style = (Style)App.Current.Resources["BaseWindowStyle"];
           //下面两句是做的这个基类是用来做类似弹出编辑的小窗体和MessageBox
    this.ShowInTaskbar = false;//不在任务栏显示 this.Owner = Application.Current.MainWindow;//绑定主窗口
    this.Loaded += delegate { InitializeEvent(); }; } private void InitializeEvent() { ControlTemplate baseWindowTemplate = (ControlTemplate)App.Current.Resources["BaseWindowControlTemplate"]; TextBlock TitleTextBlock = (TextBlock)baseWindowTemplate.FindName("Title", this); TitleTextBlock.Text = this.Title; Button minBtn = (Button)baseWindowTemplate.FindName("btnMin", this); minBtn.Click += delegate { this.WindowState = WindowState.Minimized; }; Button maxBtn = (Button)baseWindowTemplate.FindName("btnMax", this); maxBtn.Click += delegate { this.WindowState = (this.WindowState == WindowState.Normal ? WindowState.Maximized : WindowState.Normal); }; Button closeBtn = (Button)baseWindowTemplate.FindName("btnClose", this); closeBtn.Click += delegate { this.Close(); }; Border borderTitle = (Border)baseWindowTemplate.FindName("borderTitle", this); borderTitle.MouseMove += delegate(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { this.DragMove(); } }; borderTitle.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e) { if (e.ClickCount >= 2) { //maxBtn.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));//双击放大 } }; } } }

     要使用这个自定义窗体,继承即可:

    <src:BaseWindow x:Class="xxx.yyy"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:src="clr-namespace:xxx"
                 Width="450" Height="480">
    <Grid/>
    </src:BaseWindow>
  • 相关阅读:
    Mysql:read-only 配置
    Mysql:我自己总也记不住的【选项语法规则】: Command-Line-Options、Configure-Options、System-Variables、Status-Variables
    Mysql:Delayed Replication:延迟复制
    Mysql:Semi-Synchronous Replication:大名鼎鼎的 【半同步】复制
    Mysql:Replication
    Mysql:Group Replication:实战:注意事项
    Mysql:Group Replication
    端口映射工具En化版:PortMap_Gold_Edition_Premium_3.4:可以绑定特定的网卡NIC
    Mysql:SQL Modes:最令我烦的sql-modes:一个标准它不香么?!
    Mysql:Alternative Storage Engines:可替换存储引擎:mysqld的核心特性
  • 原文地址:https://www.cnblogs.com/Events/p/3794950.html
Copyright © 2011-2022 走看看