Dav*_*itt 6 wpf xaml binding datatemplate
我有以下用户控件:
<TabItem
x:Name="Self"
x:Class="App.MyTabItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:app="clr-namespace:App"
>
<TabItem.Header>
<!-- This works -->
<TextBlock Text="{Binding ElementName=Self, Path=ShortLabel, UpdateSourceTrigger=PropertyChanged}"/>
</TabItem.Header>
<TabItem.ContentTemplate>
<DataTemplate>
<!-- This binds to "Self" in the surrounding window's namespace -->
<TextBlock Text="{Binding ElementName=Self, Path=ShortLabel, UpdateSourceTrigger=PropertyChanged}"/>
Run Code Online (Sandbox Code Playgroud)
这个自定义TabItem定义了一个DependencyProperty'ShortLabel'来实现一个接口.我想结合这一点,从内的其他性质TabItem的DataTemplate.但由于奇怪的相互作用,在TextBlock内部DataTemplate被绑定到父容器的TabItem,这也被称为"自我",但在另一个XAML文件中定义.
为什么Binding在TabItem.Header中工作,而不是在TabItem.ContentTemplate中工作,我应该如何从DataTemplate中获取用户控件的属性?
TemplateBinding:尝试绑定到内容的内容中的ContentPresenter TabItem.FindAncestor, AncestorType={x:Type TabItem}:找不到TabItem父母.当我指定MyTabItem类型时,这也不起作用.ElementName=Self:尝试绑定到具有该名称的控件在错误的范围内(父容器,而不是TabItem).我认为这给出了一个提示,为什么这不起作用:DataTemplate不是在XAML中定义的位置创建的,但显然是由父容器创建的.我假设我可以替换整体ControlTemplate来实现我正在寻找的效果,但由于我想保留默认的外观和感觉TabItem而不必保持整体ControlTemplate,我非常不愿意这样做.
同时我发现问题是:如果包含s ,则TabControls不能包含(任何)ItemsTemplate(包括DisplayMemberPath).MSDN论坛上有一个解释原因的帖子.ItemsSourceVisual
由于这似乎是WPF的TabControl的一个基本问题,我正在关闭这个问题.感谢你的帮助!
尝试这个。我不确定它是否会起作用,但是
<TabItem
x:Name="Self"
x:Class="App.MyTabItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:app="clr-namespace:App"
>
<TabItem.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=ShortLabel}"/>
</DataTemplate>
</TabItem.ContentTemplate>
</TabItem>
Run Code Online (Sandbox Code Playgroud)
如果不起作用,请尝试将此属性粘贴到 <TabItem/> 中:
DataContext="{Binding RelativeSource={RelativeSource self}}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16504 次 |
| 最近记录: |