0

Задача моя была проста - создать оформление для 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"
        />
    &lt;Setter 
        Property=&quot;AllowsTransparency&quot;
        Value=&quot;True&quot;
    /&gt;
    &lt;Setter 
        Property=&quot;Background&quot;
        Value=&quot;Transparent&quot;
    /&gt;

    &lt;Setter Property=&quot;Template&quot;&gt;
        &lt;Setter.Value&gt;
            &lt;ControlTemplate TargetType=&quot;Window&quot;&gt;
                &lt;Border
                    Background=&quot;{ StaticResource BaseColor }&quot;
                    CornerRadius=&quot;{ StaticResource BorderRadius }&quot;
                &gt;
                    &lt;ContentPresenter/&gt;
                &lt;/Border&gt;
            &lt;/ControlTemplate&gt;
        &lt;/Setter.Value&gt;
    &lt;/Setter&gt;
&lt;/Style&gt;

</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
    Быть может вы словарь забыли подключить, где эти стили https://ru.stackoverflow.com/a/1266479/373567 – aepot Mar 26 '22 at 20:06
  • 1
    так как WPF не выводит исключения - с чего это вдруг. Запускаете студию, запускаете там проект через отладку и получаете все ошибки. Ожидается увидеть как "результат": - вот это я не понял к чему. Ну а так, скопировал ваш стиль, вставил его в App.xaml, поменял там BaseColor и BorderRadius (ибо у вас их нету), скопировал стиль окна, запустил все без проблем. Так что, не воспроизводится, стоит вам заняться отладкой для начала, узнать, что конкретно не нравиться именно в вашем проекте (к примеру, нет BaseColor). P.S. Ужасное форматирование! – EvgeniyZ Mar 26 '22 at 20:08
  • @aepot, ошибка действительно оказалась в словарях, но не отсутствия их подключения, а порядке, благодарю за наводку) – NyashMyash99 Mar 26 '22 at 20:23
  • @EvgeniyZ, благодарю за ответ, в Debug режиме действительно пишутся исключения, не знал.

    С проблемой разобрался, оказалось порядок подключения словарей влияет, с "BaseColor" был в самом низу ( ох, жалко потраченного дня из-за простого порядка стилей... ).

    Отправьте полноценный ответ, отмечу решением, как станет доступно :)

    – NyashMyash99 Mar 26 '22 at 20:25
  • 1
    Я ответ оформлять не буду по одной простой причине - считаю это "опечаткой", ибо проблема легко ловится отладкой, а значит и ценности в ответе для сообщества, по сути, нет (мое ИМХО). Ну а так, можете написать ответ самостоятельно. – EvgeniyZ Mar 26 '22 at 20:36

1 Answers1

0

Решение: Проблема оказалась в порядке подключения ResourceDictionary в Application.Resources. Имеющийся в SpaceView статический ресурс BaseColor подключался позднее, чем использовался.

Примечание для пользователей JetBrains Rider: Пробрасываемые исключения отображаются в Debug mode (Shift + F9), в отличии от Run mode (Shift + F10).