Установите ItemsSource в ContentPresenter .Содержание

#xaml #c#-4.0 #itemssource #contentpresenter

#xaml #c #-4.0 #itemssource #contentpresenter

Вопрос:

Я пробовал это:

 <DataTemplate x:Key="RowItemTemplate">
    <ItemsControl ItemTemplate="{StaticResource ResourceKey=BorderItemTemplate}" ItemsSource="ContentPresenter.Content">
    </ItemsControl>
</DataTemplate>
  

и это приводит к переполнению стека. Как мне установить ItemsSource элемента ItemsControl на содержимое ContentPresenter?

Редактировать:

Изменено ItemsSource="ContentPresenter.Content" на просто ItemsSource="{Binding}" , но я все еще получаю переполнение стека. Для ItemsSource основного элемента управления ItemsControl установлено значение new List<List<string>> { new List<string> { "1", "2", "3", "4" }, new List<string> { "1", "2", "3" }, new List<string> { "1", "2" }, new List<string> { "1" } }; Here — это большая часть моего кода:

 <UserControl.Resources>
    <DataTemplate x:Key="BorderItemTemplate">
        <Border RenderTransformOrigin="0.5,0.5">
            <Border.RenderTransform>
                <RotateTransform Angle="-135"/>
            </Border.RenderTransform>
            <ContentPresenter/>
        </Border>
    </DataTemplate>
    <DataTemplate x:Key="RowItemTemplate">
        <ItemsControl ItemTemplate="{StaticResource ResourceKey=BorderItemTemplate}" ItemsSource="{Binding}">
        </ItemsControl>
    </DataTemplate>
</UserControl.Resources>
<ItemsControl Name="comparisonGrid" ItemTemplate="{StaticResource ResourceKey=RowItemTemplate}">
</ItemsControl>
  

Комментарии:

1. @SteveGreatrex contentpresenter шаблонного элемента управления — я не хочу переполнения стека

2. Однако вы не создаете шаблон элемента управления (вы можете сказать, потому что используете a DataTemplate , а не a ControlTemplate ). Вы имеете в виду, что хотите ItemsSource , чтобы это были данные, которые вы создаете в шаблоне?

3. Хммм, верно. Я пытаюсь создать шаблон данных в другом элементе управления itemscontrol

Ответ №1:

Если вы просто пытаетесь установить ItemsSource свойство для данных, которые вы в данный момент создаете, вы можете использовать следующее:

 <DataTemplate x:Key="RowItemTemplate">
    <ItemsControl ItemsSource="{Binding}">
    </ItemsControl>
</DataTemplate>
  

Привязка интерпретируется как «значение this.DataContext » и DataContext всегда устанавливается на значение, которое вы создаете в шаблоне DataTemplate . .

Редактировать

Глядя на полный код OPs, я думаю, что проблема заключается в использовании ContentPresenter внутри BorderItemTemplate . Предполагая, что целью является отображение номера, к которому он привязан, его следует заменить следующим:

 <DataTemplate x:Key="BorderItemTemplate">
    <Border RenderTransformOrigin="0.5,0.5">
        <Border.RenderTransform>
            <RotateTransform Angle="-135"/>
        </Border.RenderTransform>
        <TextBlock Text="{Binding}" />
    </Border>
</DataTemplate>
  

Комментарии:

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

2. Глядя на ваш код, я думаю, что более вероятно, что BorderItemTemplate именно это вызывает проблему — в качестве шага диагностики, можете ли вы прокомментировать ContentPresenter в этом шаблоне?

3. Похоже, это проблема. Чем я должен его заменить?

4. Это исправлено! (в основном) Теперь мне просто нужно расставить вещи в нужном месте на экране. Спасибо за помощь.