2013-07-03 14 views
5

Sto provando a mettere insieme un suggerimento per un semplice pulsante. Tuttavia, quando il mouse passa con il mouse sopra il pulsante, la punta dello strumento non viene visualizzata sotto di essa.Tooltip Placement - WPF

Si prega di vedere questo: enter image description here

Questa XAML è il seguente:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="300" Width="300" xmlns:sys="clr-namespace:System;assembly=mscorlib"> 

    <Page.Resources> 

     <Style x:Key="ToolTipStyle" TargetType="{x:Type ToolTip}"> 
      <Setter Property="OverridesDefaultStyle" Value="true" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ToolTip"> 
         <Grid x:Name="PopupGrid"> 
          <Grid x:Name="ShadowBackground" Height="65" Width="260"> 
           <Grid.Effect> 
            <DropShadowEffect BlurRadius="7" ShadowDepth="1" Opacity="0.5" /> 
           </Grid.Effect> 
           <Path Margin="0 0 50 0" Width="20" Height="10" HorizontalAlignment="Right" VerticalAlignment="Top" Data="M0,10 L10,0 20,10Z" Stroke="Gray" Fill="#EFEFF0" Stretch="None" /> 
           <Border BorderThickness="1 0 1 1" CornerRadius="3" Margin="10 9 10 10" BorderBrush="Gray" Background="#EFEFF0"> 
            <ContentPresenter/> 
           </Border> 
           <Border BorderThickness="0 1 0 0" CornerRadius="0 0 3 0" Margin="0 9 10 0" HorizontalAlignment="Right" VerticalAlignment="Top" Width="41" Height="10" BorderBrush="Gray" /> 
           <Border BorderThickness="0 1 0 0" CornerRadius="3 0 0 0" Margin="10 9 69 0" VerticalAlignment="Top" Height="10" BorderBrush="Gray" /> 

          </Grid>      
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="ToolTipHeaderStyle" TargetType="{x:Type Label}"> 
      <Setter Property="FontFamily" Value="Calibri"/> 
      <Setter Property="FontWeight" Value="Bold"/> 
      <Setter Property="FontSize" Value="14"/> 
     </Style> 

     <Style x:Key="ToolTipTextStyle" TargetType="{x:Type Label}"> 
      <Setter Property="FontFamily" Value="Calibri"/> 
      <Setter Property="FontSize" Value="12"/> 
     </Style> 

    </Page.Resources> 

    <Grid x:Name="PopupGrid" Background="Red"> 
     <Button Width="100" Height="30" Content="Click Me!"> 
      <Button.ToolTip> 
       <ToolTip Style="{StaticResource ToolTipStyle}"> 
        <StackPanel Orientation="Vertical"> 
         <Label Content="Newly Rejected" Style="{StaticResource ToolTipHeaderStyle}"></Label> 
         <Label Content="Please perform requested edits and resubmit" Style="{StaticResource ToolTipTextStyle}"></Label> 
        </StackPanel> 
       </ToolTip> 
      </Button.ToolTip> 
     </Button> 
    </Grid> 

</Page> 

Non sono sicuro di che cosa sta causando questo comportamento. Potete per favore aiutare a ottenere il posizionamento corretto?

dimenticato di dire come dovrebbe apparire:

il triangolo del tooltip dovrebbero essere posti proprio sotto il cursore del mouse, il che significherebbe che il tooltip dovrebbe muoversi verso left.Something come questo: enter image description here

Grazie, -Mike

+0

si può vedere questo: http://stackoverflow.com/questions/14275755/wpf-button-with-image-trigger-mouseover-to-change -image La proprietà IsMouseOver non è impostata per il tuo caso. – Naresh

+0

Non sono sicuro di come il mouse sopra risolverà questo problema. – Mike

+0

beh, non ho mai usato il tooltip, ma quello che ho capito è che quando si passa il mouse sul pulsante, dovrebbe mostrare una finestra. per questo non è necessario attivare l'evento mouseover? Non sono sicuro. speriamo che qualche esperto chiarisca. – Naresh

risposta

3

Hai mai giocato con le proprietà di posizionamento?

È possibile aggiungere questo al tuo ToolTipStyle:

<Setter Property="ToolTipService.Placement" Value="Left" /> 

C'è anche ToolTipService.PlacementRectangle e ToolTipService.PlacementTarget

EDIT:

si potrebbe provare:

<Setter Property="ToolTipService.HorizontalOffset" Value="-200" /> 
+0

Non funziona, anche l'obiettivo. – Mike

+0

Ho modificato la mia risposta con un altro potenziale modo per risolvere il problema. – TrueEddie

+0

Tuttavia non funziona quando la descrizione del comando è specificata all'interno di un datatemplate. Vedere: http://stackoverflow.com/questions/17451723/placement-target-binding-inside-a-datatemplate-tooltip – Mike

2

Usa il CustomPopupPlacementCallback .. Nel mio caso avevo bisogno che il tip venisse visualizzato a destra di una casella di testo, Placement.Right funzionava bene sul mio laptop, ma era visualizzato a sinistra sul mio touchscreen, il modo più semplice per risolvere questo problema è usare il callback per calcolare un offset nel codice dietro relativa:

... 
tip.PlacementTarget = this; 
tip.Placement = PlacementMode.Custom; 
tip.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(PositionTooltip); 
... 

    private CustomPopupPlacement[] PositionTooltip(Size popupSize, Size targetSize, Point offset) 
    { 
     double offsetY = targetSize.Height/2 + popupSize.Height; 
     double offsetX = targetSize.Width; 

     return new CustomPopupPlacement[] { new CustomPopupPlacement(new Point(offsetX, offsetY), PopupPrimaryAxis.None) }; 
    }