Как добавить подсказку для заголовка datagrid, где текст заголовка генерируется динамически?
мне нужно добавить подсказку для заголовка столбца DataGrid
(Silverlight 4). Я буду генерировать количество столбцов и текст заголовка столбца динамически.
GridColumnCreation(....)
{
IEnumerable allHeaderText = /* Linq query */;
}
Как использовать эту коллекцию для установки всплывающей подсказки?
4 ответов
Это можно сделать с помощью DataGridTextColumn & DataGridTextColumn.HeaderStyle. В теге headerstyle используйте ToolTipService и привяжите содержимое к сгенерированным динамическим значениям. Вот пример кода для этого...
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="First Name" Binding="{Binding FName}" >
<data:DataGridTextColumn.HeaderStyle>
<Style TargetType="dataprimitives:DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl Content="{Binding}">
<ToolTipService.ToolTip>
<ToolTip Content="Tooltip First" />
</ToolTipService.ToolTip>
</ContentControl>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</data:DataGridTextColumn.HeaderStyle>
</data:DataGridTextColumn>
<data:DataGridTextColumn Header="Last Name" Binding="{Binding LName}">
<data:DataGridTextColumn.HeaderStyle>
<Style TargetType="dataprimitives:DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl Content="{Binding}">
<ToolTipService.ToolTip>
<ToolTip Content="Tooltip Second"></ToolTip>
</ToolTipService.ToolTip>
</ContentControl>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</data:DataGridTextColumn.HeaderStyle>
</data:DataGridTextColumn>
<data:DataGridTextColumn Header="City" Binding="{Binding City}">
<data:DataGridTextColumn.HeaderStyle>
<Style TargetType="dataprimitives:DataGridColumnHeader">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl Content="{Binding}">
<ToolTipService.ToolTip>
<ToolTip Content="Tooltip Third"></ToolTip>
</ToolTipService.ToolTip>
</ContentControl>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</data:DataGridTextColumn.HeaderStyle>
</data:DataGridTextColumn>
</data:DataGrid.Columns>
</data:DataGrid>
</Grid>
где Custdetails.. что-то вроде этого..
class Customer
{
public string LName { set; get; }
public string FName { set; get; }
public string City { set; get; }
}
привязка данных...
List<Customer> customers = new List<Customer>
{
new Customer { LName="Alan", FName="Ameen", City="New York" },
new Customer { LName="Forgeard", FName="Steven", City="Mumbai" },
new Customer { LName="Angur", FName="Paul", City="São Paulo" }
};
dgCustDetails.ItemsSource = customers;
это отобразит подсказки заголовка... Чтобы сделать его динамичным.. Заменить содержимое всплывающей подсказки привязкой & нужное значение...
Это можно сделать еще проще, чем в ответе @Farukh:
<data:DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="ToolTipService.ToolTipProperty"
Value="Your tool tip here" />
</Style>
</data:DataGridTextColumn.HeaderStyle>
или, если вам нужно сделать это в коде:
var style = new Style(typeof(DataGridColumnHeader));
style.Setters.Add(new Setter(ToolTipService.ToolTipProperty,
"Your tool tip here"));
column.HeaderStyle = style;
на случай, если это может кому-то помочь. Он работает при использовании TooTip собственность.
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="ToolTip" Value="{Binding}"/>
</Style>
</DataGridTextColumn.HeaderStyle>
Если вы не хотите создавать новый стиль для заголовка, просто добавьте TextBlock для заголовка столбца и установите на нем подсказку.
<DataGridTextColumn>
<DataGridTextColumn.Header>
<TextBlock Text="ColumnA" ToolTip="ColumnA Tooltip"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>