2016-02-04 3 views
1

Учитывая стиль в Page.Resource:UWP Почему стиль не применяется к TargetTypes в DataTemplate?

<Style x:Name="ItemTitle" TargetType="TextBlock"> 
     <Setter Property="FontSize" Value="16"></Setter> 
     <Setter Property="FontWeight" Value="Bold"></Setter> 
    </Style> 

Он правильно применен к любой регулярной TextBlock на той же странице.

Однако, когда я использую DataTemplate для элемента в GridView на этой странице, этот стиль не применяется.

<DataTemplate x:Key="Output" x:DataType="vm:Output"> 
     <TextBlock Text="{x:Bind Text}"></TextBlock> 
    </DataTemplate> 

Это делает работу, когда я применить стиль явно на DataTemplate, например .:

<DataTemplate x:Key="Output" x:DataType="vm:Output"> 
     <TextBlock Style="{StaticResource ItemTitle}" Text="{x:Bind Text}"></TextBlock> 
    </DataTemplate> 

Кто-нибудь знает, что случилось?

ответ

2

Ожидается и преднамеренное. Если он не выводится из Control (например, DataTemplate), он не наследует неявный стиль, если только они не являются в словарях ресурса приложения глобальными значениями по умолчанию.

Или более конкретно;

Шаблоны рассматриваются как граница инкапсуляции при поиске неявного стиля для элемента, который не является подтипом элемента управления.

Надеюсь, это поможет. Приветствия.

Добавление:

Если это ситуация, в которой у вас есть много одного и того же элемента, вложенного в шаблоне вы можете просто установить его один раз и позволить ему наследовать все вложенные элементы управления типа, как (в псевдо);

<Parent> 
    <Parent.Resources> 
    <Style TargetType="TextBlock" BasedOn="{StaticResource ItemTitle}"/> 
    <Parent.Resources> 

    <!-- These will all inherit the Style resource now, 
     without explicit style setting individually. --> 
    <TextBlock/> 
    <TextBlock/> 
    <TextBlock/> 

</Parent> 
+0

я стараюсь, чтобы обернуть содержимое шаблона в , но это не помогло (не уверен, если это было бы, на самом деле). Однако это позор, поскольку это означает много дополнительных явных назначений стиля, которые в противном случае не были бы необходимы. – Arwin

+0

В настоящее время у меня есть 8 (довольно похожих) DataTemplates с StackPanel, TextBlock и настраиваемый элемент управления (сейчас ...), и я искал способ избежать указания стиля на всех этих элементах управления. Мне понравился этот метод в WPF для автоматического выбора разных типов данных для разных типов данных в одной коллекции (например, результаты поиска, которые наследуются от одного и того же базового класса), а в последнее время даже злоупотребляют им, заменяя элементы классом EditViewModel .... Конечно, отметьте свой ответ, когда я думаю, что он правильный! ;) – Arwin

+0

На данный момент я решил пойти с другим решением, создав UserControls для всех частей, которые повторно используются. В любом случае это имеет смысл. – Arwin

Смежные вопросы