我有一个带有窗格的RadDocking,每个窗格都包含具有唯一DataContext的自定义对象。对于每个窗格,我都想显示一个带有ToolTip的标题。标头和ToolTip都应该绑定到窗格的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中时,这会很好地工作。但是,当我分离窗格时,标题和ToolTip都消失了。
只是为了澄清,如果标题和ToolTip不仅在停靠状态下出现,而且在窗口浮动时出现,那将是非常好的。
纯xaml解决方案无疑是首选。
发布于 2013-06-06 07:48:07
您可以使用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>请注意,我将标题/标题传递给您的内容的完整数据上下文。当然,您可以选择只传递相关的属性。
另外,请注意数据模板中的telerik:WindowHost.HitTestable="True"行。当文本块位于ToolWindow的标题中时,这是“感觉”文本块所在位置所必需的。
https://stackoverflow.com/questions/16951443
复制相似问题