2013-07-03 3 views
5

Я пытаюсь собрать подсказку для простой кнопки. Однако, когда мышь наводится над кнопкой, подсказка инструмента не появляется под ней.Размещение всплывающей подсказки - WPF

Пожалуйста, смотрите это: enter image description here

Это XAML, как показано ниже:

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

Я не уверен, что является причиной такого поведения. Не могли бы вы помочь правильно разместить место размещения?

Забыл упомянуть, как это должно появиться:

треугольник подсказке должно быть места прямо под курсором мыши, который будет означать, что подсказка должна двигаться в направлении left.Something так: enter image description here

Спасибо, -Mike

+0

вы можете увидеть это: http://stackoverflow.com/questions/14275755/wpf-button-with-image-trigger-mouseover-to-change -image Свойство IsMouseOver не установлено для вашего случая. – Naresh

+0

Я не уверен, как мышь решит это. – Mike

+0

ну, я никогда не использовал подсказку, но я понимаю, что когда вы наводите курсор на кнопку, она должна отображать окно. для этого вам не нужно запускать событие mouseover? Я не уверен. надеюсь, какой-то эксперт разъяснит. – Naresh

ответ

3

Вы играли со свойствами размещения?

Вы можете добавить это к вашему ToolTipStyle:

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

Там также ToolTipService.PlacementRectangle и ToolTipService.PlacementTarget

EDIT:

Вы можете попробовать:

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

Это не работает, цель тоже. – Mike

+0

Я отредактировал свой ответ другим потенциальным способом решения вашей проблемы. – TrueEddie

+0

Однако не работает, когда всплывающая подсказка указана внутри datatemplate..See: http://stackoverflow.com/questions/17451723/placement-target-binding-inside-a-datatemplate-tooltip – Mike

2

Используйте CustomPopupPlacementCallback. В моем случае мне нужен совет для отображения справа от текстового поля, Placement.Right отлично работал на моем ноутбуке, но отображался слева на моем сенсорном экране, самый простой способ исправить это - использовать обратного вызова для вычисления относительного смещения в коде позади:

... 
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) }; 
    } 
Смежные вопросы