Хобрук: Ваш путь к мастерству в программировании

Создание многоразового элемента управления WINDOW

Хорошо, это кажется очень сложным, или я упускаю что-то очевидное. Я хочу создать многоразовое ОКНО, которое будет использоваться во всех продуктах. Это означает, что элемент управления находится внутри сборки WPF.Controls. Themes/Generic.xaml не является решением, мне нужно предоставить свой собственный код для окна, например, пользовательский крючок для сообщений и т. д.

Вот мой код в WPF.Controls.dll:

public class CustomWindow : Window
{
    static CustomWindow()
    {
        DefaultStyleKeyProperty.OverrideMetadata(
 typeof(CustomWindow),
 new FrameworkPropertyMetadata(typeof(CustomWindow)));
    }

Теперь в другой сборке я создаю файл XAML и пытаюсь использовать это:

<controls:CustomWindow x:Class="Views.MainWindow"
                               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                               xmlns:controls="clr-namespace:WPF.Controls;assembly=WPF.Controls"
                               WindowStartupLocation="CenterScreen">
<TextBlock Text="TESTING" />
</controls:CustomWindow>

Что я вижу: большой черный экран, ничего больше, не меньше (большой черный прямоугольник - без заголовка). Кто-нибудь может пролить свет на это? Немного погуглив, я обнаружил, что у кого-то еще была такая же проблема, так что я думаю, что это не конкретно для меня.

Отключение аппаратного рендеринга не помогает.

05.11.2013

  • Проект MahApps.Metro позволяет вам иметь многоразовое окно, это проект с открытым исходным кодом , так что вы можете посмотреть, как эти ребята сделали это. 06.11.2013
  • Какая версия .NET? Какая версия Visual Studio? 06.11.2013
  • .NET 4.0 и Visual Studio 2012. Я подозреваю, что это может быть воспроизведено и в других версиях. 07.11.2013
  • Мне действительно интересно узнать о решении этого вопроса. Пожалуйста, держите нас в курсе, если вы можете решить эту проблему. Я могу воспроизвести это, но я не думал, что будет так сложно найти исправление. Я исчерпал все свои идеи. :) 08.11.2013
  • У меня была такая же проблема с моим приложением. Что-то вонючее было в <ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries> внутри App.xaml. Можете ли вы опубликовать свой App.xaml 17.11.2013

Ответы:


1

Вам нужно удалить статический конструктор из класса CustomWindow. Цель установки DefaultStyleKey — помочь WPF найти ваш шаблон по умолчанию, который должен быть определен в Themes/Generic.xaml. Но так как вы не хотите этого делать, вам нужно удалить его.

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

Это хороший ресурс по созданию ваши собственные элементы управления

// Chris Eelmaa: Это правильно, также я хотел бы добавить, что также возможно добавить Themes/Generic.xaml в вашу dll, а затем вам нужно добавить атрибут сборки ThemeInfo в вашу DLL (AssemblyInfo.cs) , чтобы он работал:

// http://blogs.magnatis.com/tim/dude-wheres-my-default-style
[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific 
    // resource dictionaries are located 
    ResourceDictionaryLocation.SourceAssembly //where the
    // generic resource dictionary is located 
)]
19.11.2013
  • Я попробую это предложение через несколько дней, но, насколько я помню, я пробовал массу разных комбинаций, в том числе без/с и т. д. 06.12.2013
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..