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
- GridViewColumn NO es un antepasado visual del TextBox, su antecesor es un GridViewColumnHeader
- 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>