不使用工具提示创建模板化内容的弹出窗口[WPF]

时间:2016-01-08 11:06:24

标签: c# wpf xaml

简介

对于我正在处理的项目,我必须创建一个ContentControl,当不允许某些提供的内容时,它必须显示ToolTip / Popup。 例如: TextBox包含在ContentControl中,ContentControl提供了在TextBox中输入不需要的字符时显示工具提示的逻辑。 工具提示会显示不需要的字符,在x时间后,工具提示会消失。

但是,使用ToolTip方法会导致意外和不需要的行为;

  • 鼠标悬停在空工具提示上显示(我们可以立即关闭它,但它仍然可见片刻)
  • 当鼠标离开控件时,隐藏了工具提示
  • 无法精确控制幻灯片效果,因此根据工具提示的位置(上方或下方),效果是否正确。

因此,我需要另一个不依赖于工具提示的解决方案。

示例代码

Xaml结构就像

<ContentControl x:Class="xxx.yyy.zzz.UserControls.MyContentControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    ... more namespaces ...>
<ContentControl.Template>
  <ControlTemplate TargetType="ContentControl">
    <ContentPresenter Content="{TemplateBinding Content}">
      <ContentPresenter.ToolTip>
       ...

它的用法如下:

<UserControl:Class="xxx.yyy.UserControls.TextBoxControl"
   xmlns:cn="clr-namespace:xxx.yyy.zzz.UserControls">

<cn:MyContentControl Info="{Binding ..}" x:Name="MyContentControlName">
  <TextBox Text="{Binding Text}" .."/>
</cn:MyContentControl>

其中Info是我的ContentControl的代码隐藏使用的依赖属性,其输入绑定由TextBoxControl的ViewModel提供。

旁注: 对于我们的验证,我们依赖于Validation Error Style in WPF, similar to SilverlightHow can I move a WPF Popup when its anchor element moves?

的实现

我试图合并上面提到的第一个链接中的一些模板代码,结果只显示一个小小的弹出窗口,没有显示任何内容,也没有给我我期望的行为。

从代码片段中可以看出,以前我使用的是ContentPresenter.ToolTip,遗憾的是没有ContentPresenter.Popup这样的东西,而我相信ToolTip 弹出窗口

问题

那么如何为这段代码创建类似行为的popup呢? (这将代表WPF UI上的TextBox)

<ContentPresenter Content="{TemplateBinding Content}">

0 个答案:

没有答案