Почему мои стили WPF не отображаются в дизайнере? - PullRequest
0 голосов
/ 09 августа 2010

Я создал приложение WPF с использованием Visual Studio 2010, преобразовал App.xaml в страницу и добавил вызов InitializeComponent в конструкторе.Затем я создал новое окно с именем «LoginWindow» и добавил в файл App.xaml.cs следующее:

    [STAThread]
    public static void Main()
    {
        var app = new App();
        app.Run(new LoginWindow());
    }

Затем я добавил стиль в файл App.xaml следующим образом:

    <Style x:Key="MyWindowStyle" TargetType="Window">
        <Setter Property="Background" Value="Red" />
    </Style>

Наконец, в LoginWindow я добавил следующую ссылку на стиль:

Style="{StaticResource MyWindowStyle}"

Когда я запускаю программу, я вижу окно входа в систему с красным фоном, как и ожидалось.Однако при просмотре окна в конструкторе стиль не применяется.{StaticResource MyWindowStyle} подчеркнут и показывает ошибку «Ресурс« MyWindowStyle »не может быть разрешен».

Почему это?

РЕДАКТИРОВАТЬ

Я получилисправить на другой вопрос, который также разобрался с этим.Я остановил app.xaml как страницу и даже использовал метод StartUp вместо метода Main.

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Я не уверен в причине проблемы вашего дизайнера, но я бы предложил вернуться к стандартному шаблону приложения WPF и посмотреть, работает ли он.

App.xaml является важным файлом и не должен быть преобразован в страницу (вам нужно добавить отдельную страницу), и вам не нужен метод Main для запуска приложения: по умолчанию app.xaml В файле вы увидите атрибут (в проекте по умолчанию) StartupUri="MainWindow.xaml" - используйте его, чтобы указать на LoginWindow.xaml.

Я только что попробовал в VS, используя стандартный шаблон, просто чтобы проверить, и я не вижу проблем. Чтобы подтвердить, все, что я сделал, это добавил ваш стиль к файлу (по умолчанию) app.xaml и применил его к моему окну так же, как вы - это хорошо видно в конструкторе.

0 голосов
/ 09 августа 2010

Причина, по которой он не отображается в конструкторе, заключается в том, что он просматривает только пользовательский элемент управления / что угодно + любое приложение с именем XAML приложения. Поскольку вы превратили App.Xaml в страницу, разработчик не может знать, что именно она будет размещена в UserControl. Во время выполнения WPF будет искать страницу и любого родителя, которого он может иметь (включая родителя родителя и т. Д.).

Вместо этого пусть App.xaml указывает на «фиктивную» страницу, которая в переопределенном событии Loaded переходит на нужную страницу с установленным DataContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...