C# -WPF DataGridColumnHeader в 2 строки
Я пытаюсь создать DataGridColumnHeader с 2 рядами. Я хочу, чтобы это выглядело так:
HeaderText и ID являются AttachedProperties в пользовательском DataGridColumn. Я хотел показать оба свойства со следующим шаблоном для DataGridColumnHeader:
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Margin="0">
<Border Margin="0"
BorderBrush="Black"
BorderThickness="0,0,0,1">
<TextBlock Text="{Binding Path=HeaderText, RelativeSource={RelativeSource AncestorType={x:Type ctrls:MyDataGridColumn}}}" />
</Border>
<TextBlock Text="{Binding Path=ID, RelativeSource={RelativeSource AncestorType={x:Type ctrls:MyDataGridColumn}}}" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Пример для моей пользовательской колонки:<ctrls:MyDataGridColumn HeaderText="some text" ID="1" />
HeaderText и ID не будут отображаться... какие-либо советы?
2 ответа
При работе с DataGridColumns я обычно использую Window Resources/DataTemplates, а не стили. Например:
<Window.Resources>
<DataTemplate x:Key="TemplateName">
<insert stackpanel & TextBlocks here/>
</DataTemplate>
</Window.Resources>
А затем в вашем GridView установите ваш столбец следующим образом:
<GridViewColumn CellTemplate="{StaticResource TemplateName}"/>
Я прошу прощения, если это не тот ответ, который вы ищете. Но так я всегда достиг цели, о которой ты говорил. Дайте знать, если у вас появятся вопросы!
РЕДАКТИРОВАТЬ: Я также никогда не использовал такие привязки. Позвольте мне привести пример:
Вот таблица данных для gridviewcolumn, которая имеет флажок, связанный со свойством bool в классе, который находится в источнике элементов:
<DataTemplate x:Key="IssueTemplate">
<CheckBox HorizontalAlignment="Center" IsChecked="{Binding IssueMe, Mode=TwoWay}"/>
</DataTemplate>
РЕДАКТИРОВАТЬ 2: Теперь я вижу, что вы говорите о заголовках, что делает мой ответ бессмысленным. Мои извенения. Я обычно устанавливаю заголовки на индивидуальной основе:
<GridViewColumn CellTemplate="{StaticResource IssueTemplate}">
<GridViewColumnHeader HorizontalAlignment="Center">
<StackPanel HorizontalAlignment="Center">
<TextBlock Text="Issue" HorizontalAlignment="Center"/>
<Viewbox>
<Button Content="Check/Uncheck All" FontSize="6" Margin="5 0 5 0" Command="{Binding CheckClick}"/>
</Viewbox>
</StackPanel>
</GridViewColumnHeader>
</GridViewColumn>
Если вам нужно это в стиле, то я боюсь, что не могу больше помочь. Моим лучшим предложением было бы взглянуть на ваши привязки; что-то с ними не похоже
Удачи!
Твой подарок Binding
не будет работать как DataGridColumn
это не Visual
поэтому он не будет участвовать в VisualTree
так что вы не можете пройти через это. Это просто держатель информации, больше ничего. DataGridColumnHeader
вместо этого содержит свойство Column
который дает вам доступ к DataGridColumn
,
Итак, сделайте это для обоих свойств:
<TextBlock Text="{Binding Path=Column.HeaderText, RelativeSource={RelativeSource AncestorType={x:Type DataGridColumnHeader}}}" />
Пожалуйста, скажите, решит ли это вашу проблему.