自定义控件上的工具提示出现问题(xaml wpf)

时间:2014-12-11 10:32:48

标签: wpf xaml

这是我在stackoverflow上的第一篇文章,我是xaml和wpf的新手。

我有一个我正在处理的自定义控件,我想添加一个工具提示,可以在声明控件时设置。我已经设法得到工具提示以我希望它使用样式模板的方式工作,如下所示,但是即使我没有文本设置,我也会出现工具提示出现问题。

我试图删除下面代码段中的任何代码,只留下与工具提示有关的代码。

 <Style TargetType="{x:Type local:MetroButton}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MetroButton}">
                <Grid x:Name="LayoutRoot" Margin="0" Width="{TemplateBinding BtnWidth}" Height="{TemplateBinding BtnHeight}" Background="{TemplateBinding Background}">
                   <Grid.ToolTip>
                        <Border 
                                BorderBrush="{TemplateBinding TooltipBorderColour}" 
                                Background="{TemplateBinding TooltipBackground}" 
                                BorderThickness="{TemplateBinding TooltipBorderThickness}" 
                                CornerRadius="{TemplateBinding TooltipCornerRadius}" 
                                >
                            <StackPanel>
                                <TextBlock 
                                            Text="{TemplateBinding TooltipText}"
                                            Foreground="{TemplateBinding TooltipFontColour}" 
                                            FontStyle="{TemplateBinding TooltipFontStyle}" 
                                            FontFamily="{TemplateBinding TooltipFontFamily}" 
                                            FontSize="{TemplateBinding TooltipFontSize}" 
                                            FontWeight="{TemplateBinding TooltipFontWeight}"
                                            Margin="{TemplateBinding TooltipTextMargin}"
                                            >
                                </TextBlock>
                            </StackPanel>
                        </Border>
                    </Grid.ToolTip>
                </Grid>
                <ControlTemplate.Triggers>
                   <Trigger Property="TooltipText" Value="">
                        <Setter Property="ToolTipService.IsEnabled" Value="False"/>
                    </Trigger>
               </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 个答案:

答案 0 :(得分:1)

您无需将ToolTip定义为:ToolTipService.ToolTip,然后添加触发器以禁用它,ToolTip已经在后台执行所有逻辑。

直接在网格上声明您的ToolTip,如下所示:

<Grid>
  <Grid.ToolTip>
    Add your tool tip stuff here...
  </Grid.ToolTip>
</Grid>

修改 将您的触发器更改为:

<Trigger Property="TooltipText" Value="">
  <Setter TargetName="LayoutRoot" Property="ToolTip" Value="{x:Null}"/>
</Trigger>

当文本为“”时,这将强制网格删除ToolTip