Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义WPF工具提示_Wpf_Tooltip - Fatal编程技术网

自定义WPF工具提示

自定义WPF工具提示,wpf,tooltip,Wpf,Tooltip,我想创建一个WPF工具提示,其中包含工具提示标题的标签,然后创建一个包含更详细文本的文本块。我在资源字典中创建了以下样式: <Style x:Key="AppToolTip" TargetType="ToolTip"> <Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="Template"> <Setter.Value>

我想创建一个WPF工具提示,其中包含工具提示标题的标签,然后创建一个包含更详细文本的文本块。我在资源字典中创建了以下样式:

<Style x:Key="AppToolTip"
   TargetType="ToolTip">
<Setter Property="OverridesDefaultStyle" Value="true" />    
<Setter Property="Template">
        <Setter.Value>

            <ControlTemplate TargetType="ToolTip">
                <StackPanel>
                    <Label Content="{TemplateBinding Content}" FontWeight="Bold" Background="Blue" Foreground="White">

                    </Label>
                    <TextBlock Padding="10" TextWrapping="WrapWithOverflow" Width="200">

                    </TextBlock>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value></Setter>
</Style>

并且可以成功地将此样式应用于这样的按钮,并显示工具提示标题:

<Button.ToolTip>
<ToolTip Style="{DynamicResource PalletToolTip}">
                    <Binding Source="{x:Static ResStrings.New}"/>
                </ToolTip>
</Button.ToolTip>

我一直坚持的是,如何根据上述用法设置额外描述性文本的内容?在显示工具提示标题时,我已将数据绑定到Content属性。
任何读过Adam Nathan的WPF Unreleased一书的人都会意识到我在使用他的示例工具提示XAML,但在他的例子中,他使用硬编码字符串作为标签和文本块的内容。我想创建一些更可重用的东西,因此希望使用数据绑定来实现相同的效果

可以使用包含工具提示中所需的所有必要属性的对象或视图模型

class MyToolTipViewModel : INotifyPropertyChanged
{
    public string Header
    {
       get{ return mHeader;}
       set{ mHeader = value; RaisePropertyChanged("Header"); }
    }

    public void RaisePropertyChanged(string aProperty)
    {
     // .. implementation of INotifyPropertyChanged
    }
}
然后您可以直接在这个类的实例上设置tolltip

myButton.ToolTip = new MyToolTipViewModel();
之后,工具提示将只显示ViewModel类的完整限定名。 您现在需要的是一个DataTemplate,它告诉WPF如何将类转换为可视对象

<DataTemplate DataType="{x:Type MyToolTipViewModel}">
    <TextBlock Text="{Binding Header}"/>
</DataTemplate>

数据模板需要放在资源树中。在更高级别对象的资源部分中,或直接在应用程序或窗口资源级别上


希望有帮助。

我将从
工具提示
继承一个
HeaderedToolTip
类,并添加一个
Header
属性。我将像您一样为该控件指定模板。那么我就可以这样使用它了:

<Button>
    <Button.ToolTip>
        <HeaderedToolTip Header="My Title" Content="My Content"/>
    </Button.ToolTip>
</Button>

或者,使用绑定:

<Button>
    <Button.ToolTip>
        <HeaderedToolTip Header="{Binding ToolTipTitle}" Content="{Binding ToolTipText}"/>
    </Button.ToolTip>
</Button>


这不允许您自定义工具提示本身的外观,只能自定义其中的内容。您可以更改“我的代码”以设置具有所需样式的工具提示控件,然后将工具提示的内容设置为viewmodel。