Я думаю, что у меня довольно простая цель, но, похоже, она не достигает ее.ItemsControl with static header
Все, чего я хочу достичь, - это иметь элемент управления ItemsControl (потому что я не хочу, чтобы функция выбора списка) с заголовком. Предпочтительно статический заголовок.
В настоящее время я использую сетку для заголовка, а затем копирую эту сетку в ItemTemplate (DataTemple) ItemsControl и затем помещая их один над другим в сетку. Это похоже на то, что оно не работает, но оно не всегда хорошо выглядит и т. Д.
Я нашел HeaderedItemsControl, который, как я думал, был блестящей идеей, но не мог заставить его работать, он просто не отображает заголовок вообще. Я пробовал следующее:
- Просто ввести текст в «заголовок» в Xaml
- Размещение сетки с TextBlocks со статическим текстом внутри тега ItemsControl.Header
- Размещение сетки в HeaderTemplate (DataTemplate) и связывание его простой объект
Я делаю все это в Blend в небольшом проекте, прежде чем переместить его в производственное приложение, и я просто использую простой источник данных, который я создал.
Возможно, я пропустил лодку полностью здесь, но любая помощь будет оценена по достоинству.
Мой текущий код выглядит следующим образом, первый мой HeaderedItemsControl
<HeaderedItemsControl Header="HeaderedItemsControl"
ItemsSource="{Binding Collection, Mode=Default}"
ItemTemplate="{DynamicResource ItemsControlDataTemplate}"
HeaderTemplate="{DynamicResource ItemsControlHeaderDataTemplate}"/>
тогда я получил ItemTemple, который работает, как ожидалось
<DataTemplate x:Key="ItemsControlDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Property1, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" HorizontalAlignment="Stretch" Margin="0" />
<TextBlock Text="{Binding Property2, Mode=Default}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0" />
</Grid>
</DataTemplate>
, а затем заголовок, который демонстративно против своей работы этический, я пробовал его со связыванием и с простым текстом в свойстве TextBlock.Text
<DataTemplate x:Key="ItemsControlHeaderDataTemplate">
<Grid d:DesignWidth="268">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.754*"/>
<ColumnDefinition Width="0.246*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Header.Header1, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" HorizontalAlignment="Stretch" Margin="0"/>
<TextBlock Text="{Binding Header.Header2, Mode=Default, Source={StaticResource SampleDataSource6}}" TextWrapping="Wrap" d:LayoutOverrides="Height" Grid.Column="1" HorizontalAlignment="Left" Margin="0"/>
</Grid>
</DataTemplate>
Спасибо, сэр, ваш ответ действительно помог. В конце я создал стиль для HeaderedItemsControl и добавил ContentPresenter, как вы предложили с атрибутом ContentSource = header. Таким образом, я могу использовать его во всех элементах ItemsControl в приложении и просто добавить сетку с TextBlock в теге HeaderedItemsControl.Header. Ответьте на свое предложение по распределению разделов по сетке, я проверю его, но не уверен, что он будет работать, поскольку одна сетка находится в DataTemplate, а другая будет в заголовке элемента ItemsControl, но я буду тестировать его и давать обратную связь –