Круглое окно

Последнее обновление: 15.02.2016

Для практики с шаблонами переопределим шаблон окна, чтобы оно имело нестандартную непрямоугольную форму:

<Window x:Class="ControlsTemplateApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ControlsTemplateApp"
        mc:Ignorable="d"
        Title="Круглое окно" Height="250" Width="300" 
        AllowsTransparency="True" WindowStyle="None" Background="Transparent">
    <Window.Template>
        <ControlTemplate TargetType="Window">
        <Border Name="newBorder" CornerRadius="150" Opacity="0.7" Background="LightBlue">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" />
                    <RowDefinition />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <!--Заголовок-->
                <TextBlock Text="{TemplateBinding Title}" FontWeight="Bold" HorizontalAlignment="Center"
                    MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/>
                <!--Основное содержание-->
                    <Border Grid.Row="1">
                        <AdornerDecorator>
                            <ContentPresenter />
                        </AdornerDecorator>
                    </Border>
                    <!--Элемент захвата и изменения размера - работает только для прямоугольных окон-->
                <ResizeGrip Grid.Row="2" HorizontalAlignment="Right" VerticalAlignment="Bottom"
                            Visibility="Collapsed" IsTabStop="False" />
            </Grid>
        </Border>
    </ControlTemplate>
    </Window.Template>
    <Grid>
        <Button x:Name="closeButton" Content="Закрыть" Click="closeButton_Click"
                Width="80" Height="30" Background="LightPink" />
    </Grid>
</Window>

Важно здесь отметить установку трех свойств элемента Window:

  • AllowsTransparency: позволяет сделать форму прозрачной, невидимой

  • WindowStyle: позволяет убрать у окна стиль при установке значения "None"

  • Background: устанавливает прозрачнй фон с помощью значения Transparent

И также в файле кода c# изменим код окна, определив необходимые обработчики событий:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void closeButton_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }

    //Служит для перемещения окна за заголовок формы
    private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        this.DragMove();
    }
}
Непрямоугольная форма в WPF
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850