WPF - Пользовательское окно не работает - PullRequest
1 голос
/ 13 июля 2009

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

namespace BaseWindowLibrary
{
    public class BaseWindow: Window
    {
        public BaseWindow()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(BaseWindow),
                                                     new FrameworkPropertyMetadata(
                                                        typeof(BaseWindow)));
        }
    }
}


<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:base="clr-namespace:BaseWindowLibrary">

    <ControlTemplate x:Key="BaseWindowTemplate" TargetType="{x:Type base:BaseWindow}">
        <Border BorderBrush="Blue" BorderThickness="3" Background="Coral" Width="100" Height="100"/>
    </ControlTemplate>

    <Style TargetType="{x:Type base:BaseWindow}">
        <Setter Property="Template" Value="{StaticResource BaseWindowTemplate}"/>
    </Style>

</ResourceDictionary>

Ответы [ 2 ]

3 голосов
/ 13 июля 2009

Вы определяете этот код xaml в generic.xaml или в каком-либо другом словаре ресурсов, а затем объединяете его в generic.xaml?

Требуется, чтобы стиль был стилем по умолчанию.

Кроме того, если вы добавляли вещи вручную, проверьте, изменил ли VS атрибут ThemeInfo в AssemblyInfo.cs.

И если это не сработает, вы должны опубликовать код, в котором вы объявляете окно, которое вы используете (часть в window.xaml или любое другое имя).

EDIT

Чтобы уточнить, файл generic.xaml ДОЛЖЕН находиться в папке Темы вашего решения и содержать (прямо или косвенно) код стиля.

1 голос
/ 13 июля 2009

Похоже, вы не включили ResourceDictionary в ваше приложение. Добавьте его в App.xaml

   <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="YourResource.xaml" />
   </ResourceDictionary.MergedDictionaries>

ОБНОВЛЕНИЕ на основе комментария: Я попробовал это BaseWindow: Window как пользовательский элемент управления, и он просто работал. Стиль будет находиться внутри Generic.XAML библиотеки пользовательских элементов управления.

...