Что не так с моим связыванием datatrigger? - PullRequest
2 голосов
/ 13 ноября 2009

Я создал вложенное свойство для расширения класса Button с дополнительным состоянием:

<Button v:ExtensionHelper.OperationMode="{Binding MyObject.OperationMode}" 
        Command="{Binding MyObject.Select}" 
        Style="{StaticResource operationModeControlTemplateStyle}" />

Затем я хочу получить доступ к этому значению в 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>

Но я получаю эту ошибку:

System.Windows.Data Ошибка: 4: невозможно найти источник для привязки со ссылкой 'RelativeSource FindAncestor, AncestorType = 'System.Windows.Controls.Button', AncestorLevel = '1'». BindingExpression: Путь = (0); DataItem = NULL; целевой элемент 'Кнопка' (Имя = ''); целевое свойство «NoTarget» (тип «Объект»)

Выражение привязки в DataTrigger кажется неправильным. Что я делаю не так?

1 Ответ

15 голосов
/ 13 ноября 2009

Ответ довольно прост:

Binding="{Binding RelativeSource={RelativeSource Self}, Path=(v:ExtensionHelper.OperationMode)}"
...