Свойство Template для Window
Задача моя была проста - создать оформление для Window через Style, учитывая контент окна.
Суть проблемы: Добавление Setter Property="Template" не даёт приложению запуститься, а так как WPF не выводит исключения, в чём проблема - не ясно.
Проблема точно не в: ссылках на классы/xaml, подключении файлов ( так как без Setter Property="Template" всё запускается как необходимо ).
AuthorizationView.xaml:
<Window
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"
x:Class="NC.view.AuthorizationView"
mc:Ignorable="d"
Style="{ StaticResource SpaceView }"
Width="350" Height="450"
>
<Grid>
<TextBlock>TEST</TextBlock>
</Grid>
</Window>
SpaceView.xaml:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style
BasedOn="{ StaticResource { x:Type Window } }"
TargetType="Window"
x:Key="SpaceView"
>
<Setter
Property="WindowStyle"
Value="None"
/>
<Setter
Property="ResizeMode"
Value="NoResize"
/>
<Setter
Property="AllowsTransparency"
Value="True"
/>
<Setter
Property="Background"
Value="Transparent"
/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Window">
<Border
Background="{ StaticResource BaseColor }"
CornerRadius="{ StaticResource BorderRadius }"
>
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Ожидается увидеть как "результат":
<Window
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"
x:Class="NC.view.AuthorizationView"
mc:Ignorable="d"
WindowStyle="None"
ResizeMode="NoResize"
AllowsTransparency="True"
Background="Transparent"
Width="350" Height="450"
>
<Border
Background="{ StaticResource BaseColor }"
CornerRadius="{ StaticResource BorderRadius }"
>
<Grid>
<TextBlock>TEST</TextBlock>
</Grid>
</Border>
</Window>
Ответы (1 шт):
Решение: Проблема оказалась в порядке подключения ResourceDictionary в Application.Resources. Имеющийся в SpaceView статический ресурс BaseColor подключался позднее, чем использовался.
Примечание для пользователей JetBrains Rider: Пробрасываемые исключения отображаются в Debug mode (Shift + F9), в отличии от Run mode (Shift + F10).