Привязка свойства раскадровки относительно цели раскадровки

У меня есть раскадровка, которая нацелена на элемент и связывает одно из своих свойств со свойством другого элемента:

<Storyboard>
  <DoubleAnimation 
            Storyboard.TargetProperty="RenderTransform.X" 
            From="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ActualWidth}" 
            To="0" 
            Duration="0:0:5"/>
 </Storyboard>

Эта раскадровка работает, когда раскадровка хранится в ресурсах окна, содержащего раскадровку target. Значение 'From' правильно привязано к ActualWidth экземпляра окна хоста.

Однако мне нужно сохранить раскадровку в моих ресурсах уровня приложения. window для определения свойства «From». Это понятно, поскольку изнутри привязка не сможет найти «предка» типа Window.

Я думаю, что я необходимо иметь возможность привязать значение 'From' относительно цели o f анимация, а не относительно DoubleAnimation раскадровки.

Возможно ли это, и если да, то как?

Вот пример MainWindow.xaml:

<Window.Resources>
    <!--This works : Storyboard correctly sets 'From' property to 'ActualWidth' of window-->
    <Storyboard x:Key="localStoryBoard">
        <DoubleAnimation 
            Storyboard.TargetProperty="RenderTransform.X" 
            From="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ActualWidth}" 
            To="0" 
            Duration="0:0:5"/>
    </Storyboard>
</Window.Resources>
<StackPanel>

    <Button
        RenderTransformOrigin="0,1"
        HorizontalAlignment="Left"
        Content="Click me">

        <Button.RenderTransform>
            <TranslateTransform/>
        </Button.RenderTransform>
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
                <EventTrigger.Actions>
                    <BeginStoryboard Storyboard="{StaticResource centralStoryBoard}"/>
                </EventTrigger.Actions>
            </EventTrigger> 
        </Button.Triggers>
    </Button>
</StackPanel>

А вот пример app.xaml:

<Application x:Class="WpfApplication3.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <!--Storyboard doesn't work at all-->
        <Storyboard x:Key="centralStoryBoard">
            <DoubleAnimation 
                Storyboard.TargetProperty="RenderTransform.X" 
                From="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}, Path=ActualWidth}" 
                To="0" 
                Duration="0:0:5"/>
        </Storyboard>
    </Application.Resources>
</Application>

Это не сработает, поскольку eventtrigger относится к версии app.xaml. Если вы измените его на версию локального ресурса, вы увидите, что он работает.

9
задан Noel Kennedy 17 December 2010 в 16:24
поделиться