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.