【问题标题】:Telerik RadDocking show ToolTip on floating window headerTelerik RadDocking 在浮动窗口标题上显示工具提示
【发布时间】:2013-06-05 23:23:19
【问题描述】:

我有一个带有窗格的RadDocking,每个窗格都包含具有唯一 DataContext 的自定义对象。 对于每个窗格,我想显示一个带有工具提示的标题。标题和工具提示都应该绑定到窗格的 DataContext 的某个属性。

因此我写了这样的东西:

<UserControl.Resources>
    <DataTemplate x:Key="DataTemplateTitleHeaderTooltip">
        <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerikDocking:RadPane}}, Path=Content.DataContext.TitleTootip}"
                   ToolTip="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerikDocking:RadPane}}, Path=Content.DataContext.TitleTootip}"
                   telerik:WindowHost.HitTestable="True" />
    </DataTemplate>
</UserControl.Resources>
<telerikDocking:RadDocking>
    <telerikDocking:RadDocking.DocumentHost>
        <telerikDocking:RadSplitContainer>
            <telerikDocking:RadPaneGroup>
                <telerikDocking:RadPane HeaderTemplate="{StaticResource DataTemplateTitleHeaderTooltip}">
                    <Border x:Name="Target"
                            Background="HotPink" />
                </telerikDocking:RadPane>
                <telerikDocking:RadPane Header="Pane02">
                    <Border Background="Fuchsia" />
                </telerikDocking:RadPane>
            </telerikDocking:RadPaneGroup>
        </telerikDocking:RadSplitContainer>
    </telerikDocking:RadDocking.DocumentHost>
</telerikDocking:RadDocking>

虽然“目标”具有以下 DataContext:

public class MyModel : DependencyObject
{
    #region TitleTootip

    /// <summary>
    /// Gets or sets the tool tip for our model
    /// </summary>
    public string TitleTootip
    {
        get { return (string) GetValue(TitleTootipProperty); }
        set { SetValue(TitleTootipProperty, value); }
    }

    /// <summary>
    /// Identifies the <see cref="TitleTootip"/> property.
    /// </summary>
    public static readonly DependencyProperty TitleTootipProperty =
        DependencyProperty.Register("TitleTootip", typeof (string), typeof (MyModel), new UIPropertyMetadata(""));

    #endregion
}

当窗格停靠到 DocumentHost 时,这可以正常工作。但是,当我分离窗格时,标题和工具提示都消失了。

澄清一下,如果标题和工具提示不仅会在停靠状态下出现,而且在窗口浮动时也会出现,那就太好了。

绝对首选纯 xaml 解决方案。

【问题讨论】:

    标签: wpf xaml data-binding telerik raddocking


    【解决方案1】:

    您可以使用RadPaneTitleTitleTemplate 属性来影响ToolWindow 标题的模板化方式。它们类似于HeaderHeaderTemplate,只是在窗格浮动时使用。

    此外,不要使用标题/标题模板中的相对源,而是通过窗口/UC 级别的绑定提供所需的上下文/对象。

    我已经更改了您的示例,它可以在我的机器上运行(即,当窗格浮动时我可以看到标题):

    <Window.Resources>
        <DataTemplate x:Key="DataTemplateTitleWithTooltip">
            <TextBlock Text="{Binding TitleTootip}"
                       ToolTip="{Binding TitleTootip}"
                       telerik:WindowHost.HitTestable="True"/>
        </DataTemplate>
    </Window.Resources>
    <telerikDocking:RadDocking>
        <telerikDocking:RadDocking.DocumentHost>
            <telerikDocking:RadSplitContainer>
                <telerikDocking:RadPaneGroup>
                    <telerikDocking:RadPane Header="{Binding RelativeSource={RelativeSource Self}, Path=Content.DataContext}"
                                            HeaderTemplate="{StaticResource DataTemplateTitleWithTooltip}"
                                            Title="{Binding RelativeSource={RelativeSource Self}, Path=Content.DataContext}"
                                            TitleTemplate="{StaticResource DataTemplateTitleWithTooltip}">
                        <Border x:Name="Target"
                                Background="HotPink" />
                    </telerikDocking:RadPane>
                    <telerikDocking:RadPane Header="Pane02">
                        <Border Background="Fuchsia" />
                    </telerikDocking:RadPane>
                </telerikDocking:RadPaneGroup>
            </telerikDocking:RadSplitContainer>
        </telerikDocking:RadDocking.DocumentHost>
    </telerikDocking:RadDocking>
    

    请注意,我将标题/标题传递给您内容的完整数据上下文。当然你可以选择只传递相关的属性。

    另外,请注意数据模板中的telerik:WindowHost.HitTestable="True" 行。当文本块驻留在 ToolWindow 的标题中时,这是文本块“感觉”鼠标悬停所必需的。

    【讨论】:

    • 建议的解决方案工作正常:标题和标题都提供了一个工具提示。但是,设置telerik:WindowHost.HitTestable="True" 会在鼠标悬停在 TextBlock 上(并且窗格处于浮动状态)时禁用拖放。任何想法如何启用拖放和工具提示的呈现?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多