Шаблон запущенного контента - PullRequest
3 голосов
/ 17 января 2012

Я пытаюсь настроить ContentTemplate, который изменяется в зависимости от DataTrigger.Синтетически, я чувствую, что это должно работать, но это приводит к переполнению стека при попытке отрисовки страницы:

<ItemsControl ItemsSource="{Binding Path=ExtendedFieldCollection}" ItemTemplate="{StaticResource RequiredFieldsTemplate}" />

<!--Where-->
<DataTemplate x:Key="RequiredFieldsTemplate">
    <ContentPresenter>
        <ContentPresenter.Style>
            <Style TargetType="ContentPresenter">
                <Setter Property="ContentTemplate" Value="{x:Null}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsRequired}" Value="True">
                        <Setter Property="ContentTemplate" Value="{StaticResource MyFieldDisplayTemplate}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ContentPresenter.Style>
    </ContentPresenter>
</DataTemplate>

Просто происходит

<DataTemplate x:Key="RequiredFieldsTemplate">
    <ContentPresenter ContentTemplate="{StaticResource MyFieldDisplayTemplate}" />

Работает нормально - но что яЯ пытаюсь выполнить привязку к списку полей, но отображать только обязательные поля.Я не могу просто использовать Visibility = свернутый, есть огромные накладные расходы на создание всех пользовательских элементов управления в MyFieldDisplayTemplate.Моя цель состоит в том, чтобы у необязательных полей был совершенно другой (пустой) шаблон элемента управления в ItemsControl.

Есть идеи, как настроить этот триггер?

1 Ответ

8 голосов
/ 17 января 2012

Я понял это, наткнувшись на этот вопрос: WPF: Как настроить триггер шаблона данных для управления контентом?

Я должен использовать ContentControl, а не ContentPresenter.Странно, они ведут себя одинаково, когда вы используете их одним способом, но совершенно по-разному, когда вы хотите использовать триггеры.Как всегда многому научиться.

<DataTemplate x:Key="RequiredFieldsTemplate">
    <ContentControl>
        <ContentControl.Style>
            <Style TargetType="ContentPresenter">
                <Setter Property="ContentTemplate" Value="{x:Null}"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsRequired}" Value="True">
                        <Setter Property="ContentTemplate" Value="{StaticResource MyFieldDisplayTemplate}" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ContentControl.Style>
    </ContentControl>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...