WPF - анимация объекта ниже / выше в визуальном дереве - PullRequest
0 голосов
/ 08 марта 2010

У меня следующая проблема. Я создал стиль для ContentControl, который позволяет перемещать / перетаскивать определенный элемент. Это создается с помощью MoveControl (: Control), который управляет событиями мыши вниз / перемещение / вверх. В этом классе определено свойство DependencyProperty IsDragging, которое я хочу использовать для постепенного увеличения или уменьшения значения элемента при его изменении.

Файл Xaml для моего стиля выглядит примерно так.

<Style x:Key="ItemStyle" TargetType="ContentControl">
   <!-- ... -->
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl" x:Name="ctrl">
                <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=.}">

                    <s:MoveControl Cursor="SizeAll" Template="{StaticResource MoveThumbTemplate}" x:Name="moveThumb"/>

                </Grid>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    <!-- ... -->
    </Setter>
</Style>

Итак, я хочу создать анимацию, которая будет выполняться на ContentControl, стилизованном с ItemStyle, когда MoveControl.IsDragging будет установлено в true / false.

Спасибо за помощь.

1 Ответ

0 голосов
/ 08 марта 2010

Я разобрался. Решением было использовать свойство SourceName и связать его с объектом, для которого используется свойство зависимости. Проблема заключалась в том, что по умолчанию объект this ссылается на значение DataContext элемента. Если для свойства SourceName задано ненулевое значение, то операция привязки данных будет обрабатывать это значение как место, куда данные отправляются и извлекаются из

                    <ControlTemplate.Triggers>
                    <Trigger SourceName="moveThumb" Property="IsDragging" Value="true" >
                        <Trigger.EnterActions>
                            <BeginStoryboard>
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="Opacity" 
                         From="1.0" To="0.3" Duration="0:0:0.2"/>
                                </Storyboard>
                            </BeginStoryboard>
                        </Trigger.EnterActions>
                    </Trigger>

                </ControlTemplate.Triggers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...