2011-01-06 8 views
5

Necesito agregar una información sobre herramientas para un encabezado de columna de DataGrid (Silverlight 4). Generaré dinámicamente el número de columnas y el texto del encabezado de columna.¿Cómo agregar una información sobre herramientas para un encabezado de cuadrícula de datos, donde el texto del encabezado se genera dinámicamente?

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

¿Cómo utilizar esta colección para establecer una información sobre herramientas?

Respuesta

3

Esto se puede hacer utilizando DataGridTextColumn & DataGridTextColumn.HeaderStyle. En la etiqueta del estilo del encabezado, use el ToolTipService y vincule el contenido a los valores dinámicos generados. Aquí hay un código de ejemplo para este ...

 <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> 

donde Custdetails .. es algo como esto ..

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; 

Este mostraría la información sobre herramientas del encabezado ... Para hacerlo dinámico ... Reemplazar el contenido de la información sobre herramientas con Bindin g & el valor deseado ...

21

Esto se puede hacer aún más simple que en la respuesta de @ Farukh:

<data:DataGridTextColumn.HeaderStyle> 
    <Style TargetType="DataGridColumnHeader"> 
    <Setter Property="ToolTipService.ToolTipProperty" 
      Value="Your tool tip here" /> 
    </Style> 
</data:DataGridTextColumn.HeaderStyle> 

O, si tiene que hacerlo en código:

var style = new Style(typeof(DataGridColumnHeader)); 
style.Setters.Add(new Setter(ToolTipService.ToolTipProperty, 
          "Your tool tip here")); 
column.HeaderStyle = style; 
+0

Eso me ayudó, pero parece estar sobreescribiendo el estilo existente para Column Headers. ¿Cómo puedo obtener el estilo predeterminado para un DataGridColumnHeader y hacer que mi estilo se base en él? – Marlon

+0

En realidad, ya tengo algunas definiciones de encabezado en la plantilla DataGrid, cuando aplico el estilo al encabezado parece que ignora todas las propiedades de estilo definidas por la grilla. – Marlon

+0

¿Ha intentado establecer la propiedad BasedOn del estilo a su estilo personalizado? P.ej. '