Пользовательский шаблон управления WPF не применяется - PullRequest
5 голосов
/ 13 ноября 2010

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

У меня есть пользовательский элемент управления, у него есть собственный словарь ресурсов, используемый только для определения шаблона элемента управления. Этот словарь затем объединяется в Generic.xaml.

Проблема в том, что когда этот элемент управления отображается в пользовательском интерфейсе, в нем ничего нет. Я использовал Snoop , чтобы выяснить это. Элемент управления находится в пользовательском интерфейсе, но он полностью пуст.

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

Соответствующие части моей структуры папок выглядят так:

My Directory Structure

BasicTemplate.xaml:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WPFSpecBuilder.Layouts.Templates">

    <Style TargetType="{x:Type local:BasicTemplate}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:BasicTemplate}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid>
                            <TextBlock Text="This is a basic template." />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

Generic.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Layouts/Templates/XAML/BasicTemplate.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Ответы [ 3 ]

1 голос
/ 11 октября 2011

Я думаю, что это может быть так же просто, как изменить относительный путь объединенного словаря. Попробуйте добавить / в начало пути к папке:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Layouts/Templates/XAML/BasicTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>
1 голос
/ 11 июля 2014

Попробуйте:

<ResourceDictionary.MergedDictionaries>
     <ResourceDictionary Source="pack://application:,,,/WPDSpecBuilder;component/Layouts/Templates/XAML/BasicTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>

Смотрите здесь для получения более подробной информации о пакете Ури

1 голос
/ 11 октября 2011

Попробуйте это:

  1. Установите для параметра «Действие сборки» значение BasicTemplate.xaml, равное Page.

  2. Добавить ссылку на BasicTemplate.xaml в Generic.xaml:

    ResourceDictionary Source = "/ WPDSpecBuilder; компонент / Макеты / Шаблоны / Xaml / BasicTemplate.xaml"

Должно работать.

...