10

我正在尝试为一个简单的按钮组合一个工具提示。但是,当鼠标悬停在按钮上时,工具提示不会出现在其下方。

请看这个:在此处输入图像描述

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

我不确定是什么导致了这种行为。你能帮助得到正确的位置吗?

忘了提到它应该如何出现:

工具提示的三角形应该位于鼠标光标的正下方,这意味着工具提示应该向左移动。像这样:在此处输入图像描述

谢谢,-迈克

4

2 回答 2

11

你玩过展示位置属性吗?

您可以将其添加到您的 ToolTipStyle:

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

还有 ToolTipService.PlacementRectangle 和 ToolTipService.PlacementTarget

编辑

你可以试试:

<Setter Property="ToolTipService.HorizontalOffset" Value="-200" />
于 2013-07-03T13:51:55.090 回答
4

使用 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) };
    }
于 2014-02-04T18:32:19.613 回答