none
Как у немодального wpf-окна убрать системное меню и кнопку "Распахнуть на весь экран", а кнопки "Свернуть на панель задач" и "крест" - оставить? RRS feed

  • Вопрос

  • Привет всем. Как у немодального wpf-окна убрать системное меню и кнопку "Распахнуть на весь экран", а кнопки "Свернуть на панель задач" и "крест" - оставить? Скажите, пожалуйста, кто-нибудь.
    2 октября 2013 г. 12:50

Ответы

  • просто сделайте FramwBorder = none, создайте панель со свойством Dock=Top, создайте пару Button или UserControl со всякими примочками типа OnMouseEnter/Leave, поместите на правый верхний угол в панели.
    2 октября 2013 г. 19:18

Все ответы

  • просто сделайте FramwBorder = none, создайте панель со свойством Dock=Top, создайте пару Button или UserControl со всякими примочками типа OnMouseEnter/Leave, поместите на правый верхний угол в панели.
    2 октября 2013 г. 19:18
  • Спасибо попробую.
    3 октября 2013 г. 5:57
  • Свойство окна ResizeMode отвечает за функционирование стандартных кнопок (развернуть, свернуть). Значение данного свойства CanMinimize блокирует (выключает) кнопку "Развернуть". Системное меню исчезает только когда значение свойства WindowStyle = ToolWindow. При этом, правда, пропадают также кнопки "Развернуть" и "Свернуть".
    • Предложено в качестве ответа kosuke904 3 октября 2013 г. 13:18
    3 октября 2013 г. 7:20
  • Это код главного окна приложения

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace habr
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private bool IsDown;
            private Point Origin;
            private void btn6_Click(object sender, EventArgs e)
            {
                Application.Exit();
            }
    
            private void btn7_Click(object sender, EventArgs e)
            {
                WindowState = FormWindowState.Minimized;
            }
    
            private void panel4_MouseDown(object sender, MouseEventArgs e)
            {
                IsDown = true;
                Origin = new Point(e.X, e.Y);
            }
    
            private void panel4_MouseUp(object sender, MouseEventArgs e)
            {
                IsDown = false;
                Location = new Point(Location.X - Origin.X + e.X, Location.Y - Origin.Y + e.Y);
            }
    
            private void panel4_MouseMove(object sender, MouseEventArgs e)
            {
                if (IsDown) Location = new Point(Location.X - Origin.X + e.X, Location.Y - Origin.Y + e.Y);
            }
    
            private void panel1_DoubleClick(object sender, EventArgs e)
            {
                if (WindowState == FormWindowState.Maximized) WindowState = FormWindowState.Normal;
                else WindowState = FormWindowState.Maximized;
            }
        }
    }
    

    Это код User Control-a

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace habr
    {
        public partial class btn : Button//UserControl
        {
            public enum ButtonType
            { 
                GoBack,
                Home,
                GoForward,
                Refresh,
                Search,
                Close,
                Minimize
            }
            public btn()
            {
                InitializeComponent();
            }
            private Color _OnMouseEnterColor = Color.Blue;
            private Color _OnMouseClickColor = Color.BlueViolet;
            private Color _MixedColor = Color.CadetBlue;
            private byte _Transparency1 = 64;
            private byte _Transparency2 = 64;
            private byte _AngleOfTransparency = 90;
            private float _Resizer = 1.05f;
            private ButtonType _ButtonType;
    
            private bool IsOver;
            private bool IsDown;
            private Point _initLocation;
            private Font _initFontSize;
            private Point _tempLocation;
            private Size _tempSize;
    
            public Color OnMouseEnterColor { get { return _OnMouseEnterColor; } set { _OnMouseEnterColor = value; Invalidate(); } }
            public Color OnMouseClickColor { get { return _OnMouseClickColor; } set { _OnMouseClickColor = value; Invalidate(); } }
            public Color MixedColor { get { return _MixedColor; } set { _MixedColor = value; Invalidate(); } }
            public byte Transparency1 { get { return _Transparency1; } set { _Transparency1 = value; Invalidate(); } }
            public byte Transparency2 { get { return _Transparency2; } set { _Transparency2 = value; Invalidate(); } }
            public byte AngleOfTransparency { get { return _AngleOfTransparency; } set { _AngleOfTransparency = value; Invalidate(); } }
            public float Resizer { get { return _Resizer; } set { _Resizer = value; Invalidate(); } }
            public ButtonType ButtonTypeThumb { get { return _ButtonType; } set { _ButtonType = value; Invalidate(); } }
    
    
            protected override void OnMouseEnter(EventArgs e)
            {
                base.OnMouseEnter(e);
                IsOver = true;
            }
            protected override void OnMouseLeave(EventArgs e)
            {
                base.OnMouseLeave(e);
                IsOver = false;
            }
            protected override void OnMouseDown(MouseEventArgs mevent)
            {
                base.OnMouseDown(mevent);
                _initLocation = Location;
                _tempLocation = new Point(Location.X + Width / 2, Location.Y + Height / 2);
                _tempSize = Size;
                Size = new Size((int)(Width / _Resizer), (int)(Height / _Resizer));
                Location = new Point(_tempLocation.X - Size.Width / 2, _tempLocation.Y - Size.Height / 2);
                _initFontSize = Font;
                Font = new Font(Font.FontFamily, Font.Size / _Resizer);
                IsDown = true;
                
            }
            protected override void OnMouseUp(MouseEventArgs mevent)
            {
                base.OnMouseUp(mevent);
                Location = _initLocation;
                Size = _tempSize;
                Font = _initFontSize;
                IsDown = false;
            }
            protected override void OnPaint(PaintEventArgs pevent)
            {
                base.OnPaint(pevent);
                if (_ButtonType == ButtonType.GoBack) Text = "\ue096";
                if (_ButtonType == ButtonType.GoForward) Text = "\ue097";
                if (_ButtonType == ButtonType.Home) Text = "\ue10f";
                if (_ButtonType == ButtonType.Refresh) Text = "\ue149";
                if (_ButtonType == ButtonType.Search) Text = "\ue11a";
                if (_ButtonType == ButtonType.Close) Text = "\ue10a";
                if (_ButtonType == ButtonType.Minimize) Text = "\ue108";
                 
                if (IsOver)
                {
                    if (IsDown)
                    {
                        Color c1 = Color.FromArgb
                        (_Transparency1, _OnMouseClickColor);
                        Color c2 = Color.FromArgb
                            (_Transparency2, _MixedColor);
                        Brush b = new System.Drawing.Drawing2D.LinearGradientBrush
                            (ClientRectangle, c1, c2, _AngleOfTransparency);
                        pevent.Graphics.FillRectangle(b, ClientRectangle);
                        b.Dispose();
                    }
                    else
                    {
                        Color c1 = Color.FromArgb
                       (_Transparency1, _OnMouseEnterColor);
                        Color c2 = Color.FromArgb
                            (_Transparency2, _MixedColor);
                        Brush b = new System.Drawing.Drawing2D.LinearGradientBrush
                            (ClientRectangle, c1, c2, _AngleOfTransparency);
                        pevent.Graphics.FillRectangle(b, ClientRectangle);
                        b.Dispose();
                    }
    
                }
            }
            
        }
    }
    

    Результат:

    или вот еще

    3 октября 2013 г. 13:01
  • Вопрос был о WPF-окнах, а не о WinForms :)
    3 октября 2013 г. 13:17
  • ой не заметил :)

    Код выложен для примера

    Но это легко реализовать и в WPF. . .

    3 октября 2013 г. 14:56