bit*_*onk 2 data-binding wpf datatrigger controltemplate attached-properties
我创建了一个附加属性来扩展具有附加状态的Button类:
<Button v:ExtensionHelper.OperationMode="{Binding MyObject.OperationMode}"
Command="{Binding MyObject.Select}"
Style="{StaticResource operationModeControlTemplateStyle}" />
Run Code Online (Sandbox Code Playgroud)
然后,我想在访问此值,ControlTemplate使用DataTrigger这样的:
<Style x:Key="operationModeControlTemplateStyle" TargetType="Button">
<Setter Property="IsHitTestVisible" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Image x:Name="hand" Source="hand.png" />
<Image x:Name="cross" Source="cross.png" />
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Path=(v:ExtensionHelper.OperationMode), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Value="Manual">
<Setter TargetName="cross" Property="Visibility" Value="Collapsed" />
<Setter TargetName="hand" Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=(v:ExtensionHelper.OperationMode), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Value="Disabled">
<Setter TargetName="cross" Property="Visibility" Value="Visible" />
<Setter TargetName="hand" Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=(v:ExtensionHelper.OperationMode), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Value="Automatic">
<Setter TargetName="cross" Property="Visibility" Value="Collapsed" />
<Setter TargetName="hand" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
System.Windows.Data错误:4:无法找到绑定源,引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.Button',AncestorLevel ='1''.BindingExpression:路径=(0); 的DataItem = NULL; target元素是'Button'(Name =''); target属性是'NoTarget'(类型'对象')
DataTrigger似乎是不正确的绑定表达式.我究竟做错了什么?
bit*_*onk 15
答案很简单:
Binding="{Binding RelativeSource={RelativeSource Self}, Path=(v:ExtensionHelper.OperationMode)}"
Run Code Online (Sandbox Code Playgroud)