[wpf] Comment spécifier une info-bulle pour un contrôle dans un style à partir de XAML?


2 Answers

La clé consiste à utiliser la propriété ToolTipService.ToolTip, au lieu de ToolTip - comme ceci:

<Setter Property="ToolTipService.ToolTip" Value="My Tooltip"/>
Question

J'utilise un DataGrid WPF du projet Microsoft CodePlex. J'ai un contrôle personnalisé que je veux connecter à un champ de la ligne de la grille de données. Je ne peux pas pour la vie de moi comprendre comment spécifier une info-bulle sur une ligne DataGrid.

Le plus proche que je suis venu est d'utiliser un RowStyle avec un Setter pour définir l'info-bulle, mais cela ne semble fonctionner que pour le texte. Lorsque j'essaie de placer un ControlTempalte en tant que valeur pour l'info-bulle, il affiche le résultat de l'appel de ToString sur le type ControlTemplate.

Je pense que je dois définir la propriété "Template" de l'info-bulle, mais je n'arrive pas à comprendre comment faire cela ...

  <dg:DataGrid Name="dgResults" AutoGenerateColumns="True">

            <dg:DataGrid.RowStyle >


            <Style TargetType="{x:Type dg:DataGridRow}">

                <Setter Property="ToolTip"  >
                    <Setter.Value>

                        <ControlTemplate TargetType="{x:Type ToolTip}">
                           <StackPanel>
                                 <TextBlock>txt1</TextBlock><TextBlock>txt2</TextBlock>
                           </StackPanel>
                        </ControlTemplate>


                    </Setter.Value>
                </Setter>
            </Style>

        </dg:DataGrid.RowStyle>

  </dg:DataGrid>



Vous n'êtes pas sûr de pouvoir le faire via XAML.

Un moyen plus simple pourrait être de simplement gérer l'événement LoadingRow. En xaml ont quelque chose comme:

<dg:DataGrid Name="dgResults" AutoGenerateColumns="True" 
             LoadingRow="dgResults_LoadingRow" 
             ItemsSource="{Binding ListOfStrings}" />

Puis dans le code derrière

void dgResults_LoadingRow(object sender, DataGridRowEventArgs e)
{
    DataGridRow row = e.Row;
    row.ToolTip = row.DataContext as string;
}

Évidemment, vous devrez changer le code en fonction de la façon dont vous peuplez les données dans le DataGrid. Ceci est également non testé =)




Il n'y a pas besoin de ControlTemplate . Si vous voulez le StackPanel dans l' ToolTip - ToolTip , il suffit de le définir comme StackPanel :

<Setter Property="ToolTip">
    <Setter.Value>
        <StackPanel>
            <TextBlock>txt1</TextBlock><TextBlock>txt2</TextBlock>
        </StackPanel>
    </Setter.Value>
</Setter>



Related