#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
, а не aControlTemplate
). Вы имеете в виду, что хотите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. Это исправлено! (в основном) Теперь мне просто нужно расставить вещи в нужном месте на экране. Спасибо за помощь.