2

WPF を読んでいるときに、画像ボタンの作成に使用されるテンプレートでトリガーにバインディングを作成しようとして問題が発生しました。

<ControlTemplate x:Key="ToolbarButtonHover" TargetType="Button">
    <Grid Name="backgroundGrid">
        <Image Source="{DynamicResource ResourceKey=Img}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"></Image>
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="Button.IsPressed" Value="True">
            <Setter TargetName="backgroundGrid" Property="Background" Value="#007ACC" />
        </Trigger>
        <!--Error: The property 'Binding' was not found in type Trigger-->
        <Trigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource TemplatedParent}}" Value="True">
            <Setter TargetName="backgroundGrid" Property="Background" Value="Red" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

結果は ErrorThe property 'Binding' was not found in type Triggerになります。より具体的には、 <Trigger Binding="{ Path=IsMouseOver, RelativeSource={RelativeSource TemplatedParent}}" Value="True">それを生成する行です。

このエラーの理由は何ですか?

4

1 に答える 1

10

おそらく、ここでわかるように、Trigger クラスに Binding プロパティがないためです。

おそらくDataTriggerを探しています。

<ControlTemplate x:Key="ToolbarButtonHover" TargetType="Button">
    <Grid Name="backgroundGrid">
        <Image Source="{DynamicResource ResourceKey=Img}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"></Image>
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="Button.IsPressed" Value="True">
            <Setter TargetName="backgroundGrid" Property="Background" Value="#007ACC" />
        </Trigger>
        <!--Look below, DataTrigger -->
        <DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource TemplatedParent}}" Value="True">
            <Setter TargetName="backgroundGrid" Property="Background" Value="Red" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>
于 2013-09-22T21:59:36.400 に答える