wpf listview binding relativesource

wpf - RelativeSource FindAncestor problema



listview binding (1)

Aquí está el código:

<GridViewColumn DisplayMemberBinding="{Binding Path=BookId}" Width="100"> <GridViewColumn.Header> <Border BorderBrush="Black"> <TextBlock Width="{Binding RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type GridViewColumn}}, Path=Width}" Text="ID"> <TextBlock.ContextMenu> <ContextMenu>item1</ContextMenu> </TextBlock.ContextMenu> </TextBlock> </Border> </GridViewColumn.Header> </GridViewColumn>

Básicamente, lo que intento hacer es hacer que TextBlock en el encabezado siga el ancho de toda la columna.

No funciona: el ancho del bloque de texto siempre coincide con el texto interno. ¿Alguna idea? ... Gracias de antemano!


Hay dos problemas en tu código

  1. GridViewColumn NO es un antepasado visual del TextBox, su antecesor es un GridViewColumnHeader
  2. Debería enlazar con el ancho real del GridViewColumnHeader, no el ancho (si el ancho no se especifica, será un número no válido)

Entonces tu código se convierte en:

<GridViewColumn DisplayMemberBinding="{Binding Path=BookId}" Width="100"> <GridViewColumn.Header> <Border BorderBrush="Black" > <TextBlock Text="ID" Width="{Binding RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type GridViewColumnHeader}}, Path=ActualWidth}"> <TextBlock.ContextMenu> <ContextMenu>item1</ContextMenu> </TextBlock.ContextMenu> </TextBlock> </Border> </GridViewColumn.Header> </GridViewColumn>