Почему я не могу установить шаблон данных внутри стиля, но я могу установить его внутри шаблона элемента управления? - PullRequest
1 голос
/ 26 января 2012

Почему это не работает:

 <Style TargetType="s:Substance">
    <Setter Property="Template">
        <Setter.Value>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{TemplateBinding Name}"/>
                    <TextBox Text="{TemplateBinding Count}"/>
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

Если я переключаюсь на ControlTemplate, это работает, но мне нужен шаблон данных.Кроме того, если я заменю Template на DataTemplate, он не распознает свойство.Кто-нибудь знает что происходит?Спасибо.

ПРИМЕЧАНИЕ. Вещество происходит от FrameworkElement.Это не контроль.

1 Ответ

4 голосов
/ 26 января 2012

Вы, похоже, не знаете, что делаете, Template ожидает ControlTemplate, это свойство устанавливает шаблон самого элемента управления, а не его данные.

Имеет ли ваш Substance элемент управления какое-либо свойство, которое ожидает DataTemplate? например ContentTemplate (если это ContentControl) или ItemTemplate (если это ItemsControl)?

Редактировать: Вы, вероятно, просто хотите сделать это:

<Some.Resources>
    <DataTemplate DataType="{x:Type s:Substance}"> <!-- The use of x:Type is important! -->
        <StackPanel>
            <TextBlock Text="{Binding Name}"/>
            <TextBox Text="{Binding Count}"/>
        </StackPanel>
    </DataTemplate>
</Some.Resources>

Определяет табличку данных для Substance; Куда бы Substance не добавлялось как контент или элемент, эта таблица данных будет применяться автоматически.

...