2012-06-10 13 views
8

Sto provando a posizionare il mio suggerimento in modo che si trovi sul fondo e al centro del mio oggetto target. Posso posizionarlo in fondo a ToolTipService.Postion="Bottom", ma come posizionarlo anche al centro?Come posizionare il tooltip in basso al centro

risposta

15

Sono d'accordo, le opzioni disponibili per il posizionamento di ToolTip sono un po 'limitate. Penso che dovrai combinare Placement="Bottom" con HorizontalOffset per ottenere il posizionamento Bottom/Center.

al centro della ToolTip relativo al PlacementTarget è possibile utilizzare
(PlacementTarget.ActualWidth/2.0) - (ToolTip.ActualWidth/2.0)

Esempio

<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(); 
    } 
} 

Se hai bisogno di centrare più di ToolTips potresti usare uno Style come

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