Как добавить всплывающую подсказку для заголовка сетки данных, где текст заголовка генерируется динамически? - PullRequest
6 голосов
/ 06 января 2011

Мне нужно добавить всплывающую подсказку для заголовка столбца DataGrid (Silverlight 4). Я буду генерировать количество столбцов и текст заголовка столбца динамически.

GridColumnCreation(....)
{
    IEnumerable allHeaderText = /* Linq query */; 
}

Как использовать эту коллекцию для установки всплывающей подсказки?

Ответы [ 4 ]

25 голосов
/ 24 ноября 2011

Это можно сделать даже проще, чем в ответе Фаруха:

<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;
11 голосов
/ 11 апреля 2014

На случай, если это кому-нибудь поможет.Работает при использовании свойства TooTip .

<DataGridTextColumn.HeaderStyle>
    <Style TargetType="DataGridColumnHeader">
        <Setter Property="ToolTip" Value="{Binding}"/>
    </Style>
</DataGridTextColumn.HeaderStyle>
7 голосов
/ 23 октября 2015

Если вы не хотите создавать новый стиль для заголовка, просто добавьте TextBlock для заголовка столбца и установите для него всплывающую подсказку.

<DataGridTextColumn>
    <DataGridTextColumn.Header>
        <TextBlock Text="ColumnA" ToolTip="ColumnA Tooltip"/>
    </DataGridTextColumn.Header>
</DataGridTextColumn>
7 голосов
/ 13 января 2011

Это можно сделать с помощью 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; }
}

DataBinding ...

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;

Это будет отображать всплывающие подсказки заголовка ... Чтобы сделать его динамичным .. Замените содержимое всплывающей подсказки на Binding & требуемое значение ...

...