带控件的WPF工具提示

时间:2011-08-24 12:27:32

标签: wpf tooltip

我有一个项目,我希望能够在某些控件上提供工具提示,这些控件将包含一些控件,如textbox和datepicker。我们的想法是拥有一些有限图形的弹出窗口,但有些控件可以互动。

我知道如何向控件添加“正常”工具提示,但是当您移动时,工具提示会消失,因此我无法与其进行交互。

这可能吗?如果是这样,如果没有,有什么替代方案吗?

由于

1 个答案:

答案 0 :(得分:10)

您应该使用Popup代替ToolTip

实施例。鼠标移过Popup时会打开TextBox,只要鼠标悬停在TextBoxPopup

上,鼠标就会保持打开状态
<TextBox Name="textBox"
         Text="Popup On Mouse Over"
         HorizontalAlignment="Left"/>
<Popup PlacementTarget="{Binding ElementName=textBox}"
       Placement="Bottom">
    <Popup.IsOpen>
        <MultiBinding Mode="OneWay" Converter="{StaticResource BooleanOrConverter}">
            <Binding Mode="OneWay" ElementName="textBox" Path="IsMouseOver"/>
            <Binding RelativeSource="{RelativeSource Self}" Path="IsMouseOver" />
        </MultiBinding>
    </Popup.IsOpen>
    <StackPanel>
        <TextBox Text="Some Text.."/>
        <DatePicker/>
    </StackPanel>
</Popup>

使用BooleanOrConverter

public class BooleanOrConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        foreach (object booleanValue in values)
        {
            if (booleanValue is bool == false)
            {
                throw new ApplicationException("BooleanOrConverter only accepts boolean as datatype");
            }
            if ((bool)booleanValue == true)
            {
                return true;
            }
        }
        return false;
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

<强>更新
要为DataGrid中的单元格执行此操作,您有几个选项。其中两个是在Popup的{​​{1}}内添加DataTemplates,或者您可以将其添加到DataGridTemplateColumn。这是后来的一个例子。它将要求您在DataGridCell Template

上设置SelectionMode =“Single”和SelectionUnit =“Cell”
DataGrid