你知道吗?这个问题在网上已经讨论过很多次了。但我的是一个特例,我仍然没有找到正确的解决方案。
场景:Silverlight 4 - 一个 TreeView,其数据由两个 HierarchicalDataTemplate 显示,一个显示第一级数据(即 TreeView 的父项的数据),一个显示第二级数据(用于子项的数据)项目)。在子项模板中,我必须将控件的可见性绑定到父模板的数据源类的属性。
这是 XAML 代码:
<UserControl.Resources>
<HierarchicalDataTemplate x:Key="modTreeArtDataParts2">
<Grid>
<TextBlock
Visibility="{Binding ???}"/>
</Grid>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="modTreeArtDataParts"
ItemTemplate = "{StaticResource modTreeArtDataParts2}"
ItemsSource = "{Binding RicambiItemList}">
</HierarchicalDataTemplate>
</UserControl.Resources>
<Grid>
<TreeView
ItemTemplate = "{StaticResource modTreeArtDataParts}"
ItemsSource="{Binding RicambiList}"/>
</Grid>
如果是 WPF,我可以写:
可见性 =“{Binding DataContext.Ori, Converter={StaticResource rVisibilityConverter}, RelativeSource={RelativeSource AncestorLevel=2, AncestorType={x:Type TreeViewItem}, Mode=FindAncestor}}”
......它肯定会奏效。但我知道在 Silverlight FindAncestor as binding-mode with RealitiveSource is not supported中。网络中的解决方案都围绕在可视化树的代码隐藏中向下滚动。它是通过 Behavior 还是通过 Attached-Propery 实现的并不重要。解决方案是这样的:
Public Class hideTextBlockBehavior
Inherits Behavior(Of DependencyObject)
Protected Overrides Sub OnAttached()
MyBase.OnAttached()
Dim g As Grid = FindVisualParent(Of Grid)(AssociatedObject)
Dim o As customType = g.DataContext
If o.hide Then AssociatedObject.Visibility = Visibility.Collapsed
End Sub
Private Function FindVisualParent(Of parentItem As DependencyObject)(ByVal obj As DependencyObject) As parentItem
Dim objParent As DependencyObject = obj
While obj Is Nothing = False AndAlso TypeOf obj Is parentItem = False
obj = VisualTreeHelper.GetParent(obj)
End While
Return DirectCast(obj, parentItem)
End Function
End Class
<HierarchicalDataTemplate x:Key="modTreeArtDataParts2">
<Grid>
<TextBlock>
<i:Interaction.Behaviors>
<il:hideTextBlockBehavior/>
</i:Interaction.Behaviors>
</TextBlock>
</Grid>
</HierarchicalDataTemplate>
我多次使用这样的解决方案,它们总是有效的。但是在这种情况下,我的 DataTemplate嵌套到另一个 DataTemplate 中,然后,当我在“OnAttached”方法中时,“AssociatedObject”的属性“Parent”什么都没有,然后我没有 Visual-Tree to scroll。
你有什么建议吗?先感谢您!皮莱吉