Заголовок



Небольшое пособие, как с помощью WPF и XAML сделать окно неправильной формы.

С помощью WPF и XAML окну можно придать любую форму. Любое изображение любой формы можно сделать окном программы. Изображение должно иметь формат png, его фон должен быть прозрачным.

Это легко сделать в Photoshop.

1. Взять любое изображение, выделить на нем фрагмент, который будет окном нашей программы.
2. Создать новое изображение, обязательно установить галочку "Прозрачность" (Transparency).
3. Перетащить на новое изображение выделенный фрагмент.
4. Сохранить в формате png

Далее в Visual Studio (2008+) создаем новый WPF проект. XAML-описание главного окна программы должно содержать примерно следующее:

<window title="ShapedWindow" windowstartuplocation="CenterScreen"
    allowstransparency="True" opacitymask="White" windowstyle="None"
    background="Transparent"
width="620" height="267"
    xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
    xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
    x:class="ShapedWPFForm.ShapedWindow">
    <grid>
        <img name="imgBackground" source="Shape.png" stretch="Fill" />
    </grid>
</window>

Все. Особое внимание уделяем выделенным курсивом фрагментам. Если при компиляции будут возникать ошибки - меняем "allowstransparency" на "AllowsTransparency" или "img" на "Image" и так далее в том же духе )))



Небольшой простой пример, как сделать окно программы или кнопку круглыми. Для WinForms

 

private void Form1_Load(object sender, EventArgs e)
{
   //Делаем форму круглой
   System.Drawing.Drawing2D.GraphicsPath Form_Path=new System.Drawing.Drawing2D.GraphicsPath();
   Form_Path.AddEllipse(0, 0, this.Width, this.Height);
   Region Form_Region = new Region(Form_Path);
   this.Region = Form_Region;


  //Делаем кнопку круглой
  System.Drawing.Drawing2D.GraphicsPath Button_Path=new System.Drawing.Drawing2D.GraphicsPath();
  Button_Path.AddEllipse(0, 0, this.button1.Width, this.button1.Height);
  Region Button_Region = new Region(Button_Path);
  this.button1.Region = Button_Region;
}