ControlTemplate如何处理datacontext?
使用以下模板
<ControlTemplate x:Key="ToolbarButtonHover" TargetType="Button">
<Grid Name="backgroundGrid">
<Image Source="{DynamicResource ResourceKey=Img}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"></Image>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Path=DataContext.ToolSelected, RelativeSource={RelativeSource TemplatedParent}}" Value="Unlink">
<Setter TargetName="backgroundGrid" Property="Background" Value="Red" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
带控件
<Button Content="Button"
Template="{StaticResource ResourceKey=ToolbarButtonHover}"
Height="24" Width="24" Background="Red">
<Button.Resources>
<ImageSource x:Key="Img">Resources/Icons/toolSelect.png</ImageSource>
</Button.Resources>
</Button>
但这不会使背景变红。我已经通过控件旁边的ToolSelected
验证了ToolbarViewModel Property <Label Content="{Binding ToolSelected}"/>
的值实际上是Unlink。所以我认为问题是模板没有使用正确的DataContext
,但我不确定。这就是我向你寻求帮助的原因。
Control位于自定义用户控件中,ToolbarViewModel被设置为所有内容的上下文,就像这样。
<UserControl.DataContext>
<local:ToolboxView/>
</UserControl.DataContext>
答案 0 :(得分:4)
尝试从RelativeSource
删除DataTrigger.Binding
,然后它应该在当前DataContext
中有用:
<DataTrigger Binding="{Binding ToolSelected}" Value="Unlink">
<Setter TargetName="backgroundGrid" Property="Background" Value="Red" />
</DataTrigger>