Не применяется стиль окна C# WPF

Прописал стиль окна:

<Style TargetType="Window">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Window">
                    <Grid>
                        <Rectangle Width="800" Height="639" Fill="White" Margin="0,95,0,0" RadiusX="16" RadiusY="16"></Rectangle>
                        <Image Source="/Resources/electronics 1.png" Width="290" Height="290" Margin="257,0,257,440"/>                           
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

В конструкторе Visual Studio окно отображается корректно:

введите сюда описание изображения

Однако, при запуске окно выглядит следующим образом:

введите сюда описание изображения

У окна прописаны следующие свойства:

WindowStartupLocation="CenterScreen" WindowStyle="None" ResizeMode="NoResize" AllowsTransparency="True" ShowInTaskbar="False"

Объясните горе-разработчику, почему стиль не применяется)


Ответы (1 шт):

Автор решения: aepot

У меня заработало вот так:

  1. Переместите стиль в App.xaml и задайте ему ключ
<Application.Resources>
    <Style TargetType="{x:Type Window}" x:Key="MyWindowStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Grid>
                        <Rectangle Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Fill="White" Margin="0,95,0,0" RadiusX="16" RadiusY="16"/>
                        <Image Source="/Resources/electronics 1.png" Width="290" Height="290" HorizontalAlignment="Center" VerticalAlignment="Top"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

Высоту и ширину прямоугольника можно сразу привязать к размерам реального окна. ВДруг вы в будущем захотите менять размер окна. Не рекомендую использовать марджины для абсолютного позиционирования, ну если только в редких случаях.

  1. Используйте ключ для подключения стиля
Width="800" Height="639" Style="{StaticResource MyWindowStyle}" WindowStyle="None" AllowsTransparency="True"

Смысл здесь в том, что окно не может использовать собственный словарь ресурсов, так как на момент инициализации этот словарь еще не существует, то есть не самого стиля еще нет, а окно уже пытается его использовать. Поэтому я предложил унести стиль на уровень выше.

→ Ссылка