我将以下XAML代码作为自定义控件的一部分:
<telerik:RadTreeView x:Name="treeModules">
<telerik:RadTreeView.ItemTemplate>
<core:HierarchicalDataTemplate ItemsSource="{Binding Submodules}">
<local:ModuleInfoUserControl IsReadOnly="{Binding ElementName=ctrlIsReadOnly, Path=IsReadOnly}"/>
</core:HierarchicalDataTemplate>
</telerik:RadTreeView.ItemTemplate>
</telerik:RadTreeView>
其中:
ItemsSource
属性
treeModules
由代码设置为列表
Module
个对象。 Module
课程
有一个名为Submodules
的属性,
它包含一个集合
更多模块。ModuleInfoUserControl
是一种习惯
用于显示模块的控件
信息。 IsReadOnly
是一个
在...上声明的依赖属性
控制。ctrlIsReadOnly
是一个隐藏的TextBox
在主用户的其他地方定义
控制。它被用来制作一堆
控制可编辑或只读。 问题:绑定到ctrlIsReadOnly
中的ModuleInfoUserControl
元素不起作用。即使IsReadOnly
的相应属性发生更改,它的crlIsReadOnly
属性也始终处于默认状态。
但是,如果我将RadTreeView更改为标准的Silverlight TreeView,并将HierarchicalDataTemplate更改为标准的Silverlight版本,它将按预期工作。
好的,到目前为止,我已经粘贴了我发给Telerik的支持票的确切副本,希望他们可以帮助我。我必须说答复是快速而有效的:他们告诉我他们无法重现这个错误,并向我发送了一个小的测试项目来运行有问题的代码。测试项目显示我的机器上的错误,但适用于Telerik的。
这是非常奇怪的部分。我在个人网站上发布了Telerik的示例项目。这是链接:
http://www.konamiman.com/TelerikTest/TestPage.html
这个想法是当按下“ToggleIsReadOnly”按钮时,“Root”TextBox应该变为只读。但同样,它适用于Telerik的机器,但不适用于我的机器!所以应用程序代码本身显然没问题。
认为它可能是我的机器的Silverlight运行时出现问题,我测试了其他一些,包括:西班牙语Windows 7 32和64位,西班牙语Windows XP,英语Windows Server 2008,甚至在我妻子的计算机上日本的Windows XP。 在所有这些方面,它无法按预期工作。
那么,这里发生了什么?我完全陷入困境。
顺便说一下,我使用的Silverlight Runtime版本是3.0.50106.0。
更新:我也上传了测试项目的源代码。这是URL:
答案 0 :(得分:1)
我现在已经尝试了测试项目,但我无法让它工作。我尝试将线程文化更改为“en-US”,但这没有用。似乎项控件HierarchicalDataTemplate无法绑定到该datatemplate的元素外部上的属性。我想你应该回到Telerik并再次询问他们是否100%确定它在他们的机器上按预期工作。如果确实如此,这是一个非常奇怪的错误。
<强> [编辑] 强>
我找到了更多信息,请参阅下面的链接。看起来这是一个普遍的银光问题。但是,Telerik家伙声称它可以在他的机器上运行,这仍然很奇怪
http://forums.silverlight.net/forums/p/108804/267789.aspx
这与Telerik GridView组件有类似之处:
http://www.telerik.com/community/forums/silverlight/gridview/elementname-binding-inside-of-celltemplate.aspx
答案 1 :(得分:0)
我找到了一种似乎工作正常的替代方法。我没有将ctrlIsReadOnly
定义为主用户控制树的一部分,而是将其定义为静态资源:
<UserControl.Resources>
<TextBox x:Key="ctrlIsReadOnly" IsEnabled="True" IsReadOnly="False" Visibility="Collapsed" />
</UserControl.Resources>
然后我只需稍微更改ModuleInfoUserControl上的绑定声明:
<local:ModuleInfoUserControl IsReadOnly="{Binding Source={StaticResource ctrlIsReadOnly}, Path=IsReadOnly}"/>
然后我以这种方式从代码访问ctrlIsReadOnly:((TextBox)this.Resources["ctrlIsReadOnly"])