5

ControlTemplate はデータ コンテキストをどのように処理しますか?

次のテンプレートの使用

<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>

しかし、これは背景を赤くしません。コントロールの横にあることで、ToolbarViewModel プロパティの値がToolSelected実際に Unlink であることを確認<Label Content="{Binding ToolSelected}"/>しました。したがって、問題はテンプレートが正しいDataContextを使用していないことだと思いますが、これについてはわかりません。だからこそ、あなたに助けを求めます。

コントロールはカスタム ユーザー コントロールにあり、ToolbarViewModel はそのすべてのコンテキストとして設定されます。

<UserControl.DataContext>
    <local:ToolboxView/>
</UserControl.DataContext>
4

1 に答える 1

4

から削除RelativeSourceしてみてください。DataTrigger.Binding現在の状態で動作するはずDataContextです:

<DataTrigger Binding="{Binding ToolSelected}" Value="Unlink">
   <Setter TargetName="backgroundGrid" Property="Background" Value="Red" />
</DataTrigger>
于 2013-09-24T13:22:56.160 に答える