2010-11-13 2 views
5

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

У меня есть пользовательский контроль, у него есть собственный словарь ресурсов, используемый только для определения шаблона управления. Затем этот словарь объединяется в 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> 
+0

Я продвинется по принципу исключения: во-первых утверждать, что ваше определение стиля НЕ является частью проблема. Итак, выберите его из вашего вложенного ResourceDictionary и вставьте его в Generic.xaml (который, я надеюсь, вы ссылаетесь в App.xaml). После этого показывает желаемый эффект, попробуйте то, что предлагает Стив (утверждая, что ваш относительный путь задан правильно) –

ответ

1

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

  1. Set Сложение Действие на BasicTemplate.xaml к странице.

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

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

Она должна работать.

1

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

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Layouts/Templates/XAML/BasicTemplate.xaml" /> 
</ResourceDictionary.MergedDictionaries>