工具提示放置 - WPF

问题描述 投票:0回答:3

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

请看这个: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>

我不确定是什么导致了这种行为。您能帮忙确定正确的位置吗?

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

工具提示的三角形应位于鼠标光标的正下方,这意味着工具提示应向左移动。如下所示:enter image description here

谢谢, -迈克

wpf
3个回答
11
投票

您尝试过展示位置属性吗?

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

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

还有 ToolTipService.PlacementRectangle 和 ToolTipService.PlacementTarget

编辑

你可以尝试:

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

5
投票

使用 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) };
    }

0
投票
<Button Grid.Column="1">
    <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
        <fa:FontAwesome Icon="InfoCircle" Margin="5, 0, 5, 0"/>
    </StackPanel>
    <Button.Style>
        <Style TargetType="Button" BasedOn="{StaticResource templateButtonStyle}">
            <Setter Property="ToolTip">
                <Setter.Value>
                    <ToolTip Placement="Right" PlacementTarget="{Binding RelativeSource={RelativeSource Self}}">
                        <TextBlock Text="{Binding Description}"/>
                    </ToolTip>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Description}" Value="">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

例如,您还可以检查 Button 的此变体。

© www.soinside.com 2019 - 2024. All rights reserved.