2009-11-14 14 views
10

J'ai essayé les éléments suivants:Impossible de définir l'infobulle de DataGridColumn

<tk:DataGridTextColumn 
    Header="Item" 
    Binding="{Binding Item.Title}" 
    ToolTipService.ToolTip="{Binding Item.Description}" /> 

Et je ne vois pas infobulle.

Des idées? Est-ce que c'est déjà implémenté?

Répondre

24

Cela fonctionne pour moi:

<Style TargetType="{x:Type Custom:DataGridColumnHeader}"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="ToolTip" Value="{Binding Column.(ToolTipService.ToolTip), RelativeSource={RelativeSource Self}}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

brillant! Ce petit style fait maintenant apparaître les info-bulles, sans avoir à changer de DataGridColumnHeaders en DataGridTextColumns ou quoi que ce soit. Exactement ce que je cherchais! –

+0

Hey pouvez-vous me dire comment vous ajoutez le style ci-dessus à DataGridComboBoxColumn – Abhi

7

pls, vérifier si le code ci-dessous fonctionnerait pour vous, il devrait afficher des infobulles pour les têtes de colonnes et de cellules, l'infobulle de cellule doit être plié le champ Description de l'objet de données:

<DataGridTextColumn Width="SizeToCells" 
        MinWidth="150" 
        Binding="{Binding Name}"> 

    <DataGridTextColumn.Header> 
     <TextBlock Text="Name" ToolTipService.ToolTip="Header ToolTip" /> 
    </DataGridTextColumn.Header> 

    <DataGridTextColumn.ElementStyle> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Setter Property="ToolTip" Value="{Binding Description}" /> 
      <Setter Property="TextWrapping" Value="Wrap" /> 
     </Style> 
    </DataGridTextColumn.ElementStyle> 
</DataGridTextColumn> 
solution

trouvée ici : 5 Random Gotchas with the WPF DataGrid

4

Le DataGridTextColumn n'est pas visible. Vous devez définir des info-bulles sur l'en-tête ou le contenu.

Pour définir une info-bulle sur l'en-tête, changer l'en-tête à un TextBlock:

<tk:DataGridTextColumn 
    Binding="{Binding Item.Title}"> 
    <tk:DataGridTextColumn.Header> 
    <TextBlock 
     Text="Text" 
     ToolTipService.ToolTip="Tooltip for header" /> 
    </tk:DataGridTextColumn.Header> 
</tk:DataGridTextColumn> 

Pour définir une info-bulle sur le contenu de la colonne, mettez-le dans le style:

<tk:DataGridTextColumn 
    Binding="{Binding Item.Title}" 
    Heading="Text"> 
    <tk:DataGridTextColumn.ElementStyle> 
    <Style> 
     <Setter Property="ToolTipService.ToolTip" Value="{Binding Item.Description}" /> 
    </Style> 
    </tk:DataGridTextColumn.ElementStyle> 
</tk:DataGridTextColumn> 

Vous pouvez veulent également définir EditingElementStyle.

0

Set ToolTipService.ToolTip propriété style en-tête:

<Setter Property="ToolTipService.ToolTip" Value="{x:Static res:StringResources.List_Dialog_SelectAll_Checkbox}"/> 

Ici, il est comment je l'ai utilisé quand j'avais image dans DataGridCheckBoxColumn au lieu du texte. XAML:

<Window x:Class="MyProject.GUI.ListDialog" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:viewModel="clr-MyProject.GUI.ViewModels" 
      Title="{Binding Title}" Height="350" Width="650" 
      MinHeight="350" MinWidth="650" 
      xmlns:res="clr-MyProject.GUI.Resources" Closing="Window_Closing" WindowStyle="ToolWindow"> 
    <Window.Resources> 
      <BitmapImage x:Key="MyImageSource" UriSource="Resources/Images/SelectDeselect.png" /> 
      <Style x:Key="CheckBoxHeader" TargetType="DataGridColumnHeader"> 
       <Setter Property="HorizontalContentAlignment" Value="Center"/> 
       <Setter Property="VerticalContentAlignment" Value="Center"/> 
          <Setter Property="ToolTipService.ToolTip" Value="{x:Static res:StringResources.List_Dialog_SelectAll_Checkbox}"/> 
       <Setter Property="ContentTemplate"> 
        <Setter.Value> 
         <DataTemplate> 
          <Image Width="15" Height="15" Source="{StaticResource MyImageSource}" /> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
    </Window.Resources> 

C#:

DataGridCheckBoxColumn checkColumn = new DataGridCheckBoxColumn(); 
checkColumn.HeaderStyle = new System.Windows.Style(); 
checkColumn.CanUserSort = checkColumn.CanUserResize = false; 
checkColumn.Width = new DataGridLength(25); 
checkColumn.HeaderStyle = (Style)Resources["CheckBoxHeader"]; 
checkColumn.CellStyle = (Style)Resources["CenterAlignedCellStyle"]; 
checkColumn.IsReadOnly = false; 
dataGrid.Columns.Add(checkColumn); 
1

De plus, si votre colonne est un DataGridTemplateColumn au lieu d'un DataGridTextColumn, vous pouvez le faire comme ceci:

<DataGridTemplateColumn x:Name="MyCheckBoxColumn" CellStyle="{StaticResource MyCellStyle}" > 
    <DataGridTemplateColumn.HeaderTemplate> 
     <DataTemplate> 
      <TextBlock Text="MyHeaderName" ToolTip="This is my column description" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.HeaderTemplate> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox ... /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn>