Telerik RadDocking покажет всплывающую подсказку на плавающем заголовке окна

У меня есть 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>

Пока "Target" имеет следующий 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 определенно предпочтителен.

1 ответ

Решение

Вы можете использовать Title а также TitleTemplate свойства RadPane повлиять на то, как название ToolWindow это шаблон. Они похожи на Header а также HeaderTemplate просто используется, когда панель плавает.

Кроме того, вместо использования относительного источника из шаблона заголовка / заголовка, предоставьте контекст / объект, который вам нужен, через привязку на уровне окна /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.

Другие вопросы по тегам