我正在创造附属物。我的附加课程是helper:FocusDetail
,有2个属性。第二个属性DetailBody
类型是对象。我在项目控件上使用此属性
<ItemsControl ItemsSource="{Binding Riches}" BorderThickness="0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding TextInfo}"
helper:FocusDetail.DetailTitle="{StaticResource strTitle}"
helper:FocusDetail.DetailBody="{Binding Description}"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是成功的工作
我正在改变这样的附加值
<DataTemplate>
<TextBox Text="{Binding TextInfo}"
helper:FocusDetail.DetailTitle="{StaticResource strTitle}">
<helper:FocusDetail.DetailBody>
<Binding Path="Description"/>
</helper:FocusDetail.DetailBody>
</TextBox>
</DataTemplate>
这是工作 我正在改变
<DataTemplate>
<TextBox Text="{Binding TextInfo}"
helper:FocusDetail.DetailTitle="{StaticResource strTitle}"
>
<helper:FocusDetail.DetailBody>
<TextBlock Text="Some static text"></TextBlock>
</helper:FocusDetail.DetailBody>
</TextBox>
这很有效。我的最后一次改变是在这里
<DataTemplate>
<TextBox Text="{Binding TextInfo}"
helper:FocusDetail.DetailTitle="{StaticResource strTitle}">
<helper:FocusDetail.DetailBody>
<TextBlock Text="{Binding Description}"></TextBlock>
</helper:FocusDetail.DetailBody>
</TextBox>
</DataTemplate>
这不行。 Textblock为空。
我正在改变
<TextBlock Text="{Binding Description}"></TextBlock>
到
<TextBlock Text="{Binding }"></TextBlock>
。
但是textblock返回Window DataContext类型。已经从Itemscontrol迭代退出。
为什么绑定错误的工作?
如何像上一个代码一样声明附加属性?
我需要附加属性包含可视树控件。
答案 0 :(得分:1)
您的绑定正在中断,因为它依赖于继承的DataContext,但是通过分配给(非内容)属性而从FrameworkElement DataContext继承结构中取出。
从它看起来你想要做的最好的解决方案可能是使用DataTemplate来定义你的UI元素(这里是TextBlock),并为数据本身提供一个单独的属性,然后可以应用于在树中您希望显示视觉效果的点上具有ContentControl或ContentPresenter的模板(我假设这是为了驱动某种工具提示/弹出窗口)。
<TextBox Text="{Binding TextInfo}"
helper:FocusDetail.DetailTitle="{StaticResource strTitle}"
helper:FocusDetail.DetailBody="{Binding}"
>
<helper:FocusDetail.DetailBodyTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}"></TextBlock>
</DataTemplate>
</helper:FocusDetail.DetailBodyTemplate>
</TextBox>