【发布时间】:2012-07-21 16:41:16
【问题描述】:
我想通过相对源将我的 DataTemplate (ClosableTabItemTemplate) 绑定到 HeaderedContentControl 的 Workspaces DataContext。不幸的是它不起作用?有什么想法吗?
顺便说一句: 我收到以下命令行错误: System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“AllUserView”(名称=“”)上找不到“DisplayName”属性。 BindingExpression:Path=DataContext.DisplayName; DataItem='TabItem' (名称='');目标元素是'ContentPresenter'(名称='');目标属性是“内容”(类型“对象”)
Cya 迈克尔
<HeaderedContentControl
Content="{Binding Path=Workspaces}"
ContentTemplate="{StaticResource WorkspacesTemplate}"
Header=""
Style="{StaticResource MainHCCStyle}" DataContext="{Binding}"
/>
<DataTemplate x:Key="ClosableTabItemTemplate">
<DockPanel Width="120" >
<Button
Command="{Binding Path=DataContext.CloseCommand, RelativeSource={RelativeSource AncestorType={x:Type HeaderedContentControl}}}"
Content="X"
Cursor="Hand"
DockPanel.Dock="Right"
Focusable="False"
FontFamily="Courier"
FontSize="9"
FontWeight="Bold"
Margin="0,1,0,0"
Padding="0"
VerticalContentAlignment="Bottom"
Width="16" Height="16"
/>
<ContentPresenter
Content="{Binding Path=DataContext.DisplayName, RelativeSource={RelativeSource AncestorType={x:Type HeaderedContentControl}}}"
VerticalAlignment="Center"
/>
</DockPanel>
</DataTemplate>
<DataTemplate x:Key="WorkspacesTemplate">
<TabControl
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding}"
ItemTemplate="{StaticResource ClosableTabItemTemplate}"
Margin="4"
/>
</DataTemplate>
【问题讨论】:
-
我认为在数据模板中你也必须使用 FindAncestor
-
ContentPresenters 实际上是专门用于 ControlTemplates,而不是 DataTemplates。考虑使用 TextBlock 并绑定到 Text 属性。命令绑定成功了吗?
标签: wpf binding relativesource