我有一个带有窗格的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
}
当窗格停靠到documentthost中时,这工作得很好。但是,当我分离窗格时,标题和工具提示都消失了。
澄清一下,如果标题和工具提示不仅在停靠状态下出现,而且在窗口浮动时出现,那将是非常好的。
您可以使用RadPane
的Title
和TitleTemplate
属性来影响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>
注意,我向header/title传递了内容的完整数据上下文。当然,你可以选择只传递相关的属性。
还要注意数据模板中的telerik:WindowHost.HitTestable="True"
行。