问题描述
我正在尝试找到一种方法来访问 ControlTemplate
外部的命名元素,反之亦然,从外部访问 ControlTemplate
中的命名元素,从 XAML(不是代码隐藏)。
<ResourceDictionary>
<ControlTemplate x:Key="MyControlTemplate">
<views:MyView x:Name="MyViewName">
<views:MyView.Triggers>
<DataTrigger targettype="views:MyView" Binding="{Binding MyProperty}" Value="True">
<Setter TargetName="MyCollectionView" Property="IsEnabled" Value="False"></Setter>
</DataTrigger>
</views:MyView.Triggers>
</views:MyView>
</ControlTemplate>
<ControlTemplate x:Key="MyOtherControlTemplate">
<views:MyOtherView x:Name="MyViewName"></views:MyView>
</ControlTemplate>
</ResourceDictionary>
<CollectionView x:Name="MyCollectionView">
...
</CollectionView>
<TemplatedView
Grid.Row="1"
ControlTemplate="{StaticResource MyControlTemplate}"/>
<TemplatedView
Grid.Row="1"
ControlTemplate="{StaticResource MyOtherControlTemplate}"/>
此代码位于 ContentView
内。它根据 CollectionView 中的选定项目显示一个视图 (MyView) 或另一个视图 (MyOtherView)。如果 MyProperty(视图 MyView 中的一个属性)为 True,则我希望禁用 collectionView。由于 MyView 是在 ControlTemplate 中声明的,因此我无法管理它以访问 MyCollectionView
其中 MyProperty
是 MyView
viewmodel 中的布尔值。
此代码抛出 ArgumentNullException: Value cannot be null. Parameter name: targetobject
。
显然,MyCollectionView
在 ControlTemplate
中是未知的
我还尝试在 MyView
的 DataTrigger
中引用 MyCollectionView
的名称,但没有结果。
有人可以帮我吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)