2012-06-10 22 views

Respuesta

15

Acepto, las opciones disponibles para posicionar un ToolTip son un poco limitadas. Creo que tendrá que combinar Placement="Bottom" con HorizontalOffset para obtener el posicionamiento inferior/central.

para centrar la ToolTip en relación con el PlacementTarget puede utilizar
(PlacementTarget.ActualWidth/2.0) - (ToolTip.ActualWidth/2.0)

Ejemplo

<Button Content="Test"> 
    <Button.ToolTip> 
     <ToolTip Content="ToolTip Text" 
       Placement="Bottom"> 
      <ToolTip.HorizontalOffset> 
       <MultiBinding Converter="{StaticResource CenterToolTipConverter}"> 
        <Binding RelativeSource="{RelativeSource Self}" Path="PlacementTarget.ActualWidth"/> 
        <Binding RelativeSource="{RelativeSource Self}" Path="ActualWidth"/> 
       </MultiBinding> 
      </ToolTip.HorizontalOffset> 
     </ToolTip> 
    </Button.ToolTip> 
</Button> 

CenterToolTipConverter

public class CenterToolTipConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (values.FirstOrDefault(v => v == DependencyProperty.UnsetValue) != null) 
     { 
      return double.NaN; 
     } 
     double placementTargetWidth = (double)values[0]; 
     double toolTipWidth = (double)values[1]; 
     return (placementTargetWidth/2.0) - (toolTipWidth/2.0); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

Si necesita centrar varios ToolTips puede usar un Style como

<Style x:Key="centeredToolTip" TargetType="ToolTip"> 
    <Setter Property="HorizontalOffset"> 
     <Setter.Value> 
      <MultiBinding Converter="{StaticResource CenterToolTipConverter}"> 
       <Binding RelativeSource="{RelativeSource Self}" Path="PlacementTarget.ActualWidth"/> 
       <Binding RelativeSource="{RelativeSource Self}" Path="ActualWidth"/> 
      </MultiBinding> 
     </Setter.Value> 
    </Setter> 
</Style> 

<!-- ... --> 

<Button Content="Test"> 
    <Button.ToolTip> 
     <ToolTip Style="{StaticResource centeredToolTip}" 
       Placement="Bottom" 
       Content="ToolTip Text"/> 
    </Button.ToolTip> 
</Button> 
Cuestiones relacionadas