задать поворот элементов CarouselPanel в стиле

183
30 декабря 2019, 19:20

пытаюсь задать поворот элементов CarouselPanel в стиле (для начала как статический, но в идеале бы угол поворота динамический, касательной к траектории движения каждого элемента) таким образом:

<dxca:CarouselPanel x:Name="myCarousel"  >
    <dxca:CarouselPanel.Resources>
         <Style TargetType="{x:Type Rectangle}" 
               BasedOn="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type dxca:CarouselPanel}, ResourceId=advancedCarouselItemStyle}}"  >
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <TransformGroup>
                        <RotateTransform  Angle="30"  />
                    </TransformGroup>
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="{x:Type Ellipse}" 
               BasedOn="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type dxca:CarouselPanel}, ResourceId=advancedCarouselItemStyle}}">
            <Setter Property="Opacity" Value="1" />
        </Style>
    </dxca:CarouselPanel.Resources>
    <dxca:CarouselPanel.ItemMovingPath>
        <PathGeometry>
            <PathFigure IsClosed="False" StartPoint="0,0">
                <!--простая дуга из левого верхнего в правый нижний угол -->
                <ArcSegment Point="100,100" Size="100,100" />
            </PathFigure>
        </PathGeometry>
    </dxca:CarouselPanel.ItemMovingPath>
    <Rectangle Fill="Blue"        />
    <Rectangle Fill="Green"       />
    <Rectangle Fill="Yellow"      />
    <Rectangle Fill="Purple"      />
    <Rectangle Fill="Orange"      />
    <Rectangle Fill="Red"         />
    <Ellipse Fill="DarkRed"       />
</dxca:CarouselPanel>

в итоге просто элементы типа прямоугольник поворачиваются на ожидаемый угол 30 градусов, но перестают двигаться вообще (!) и застывают в левом верхнем углу карусели. Что я делаю не так?

Answer 1

(Всем откликнувшимся -- вы очень помогли, спасибище прост)

Расположение объектов карусели с динамическим их поворотом вдоль касательной к текущей точке траектории сделал достаточно просто, следующим образом:

<dxca:CarouselPanel x:Name="myCarousel"  Margin="10,10,10,0"  Grid.Row="0"
                    ClipToBounds="True"
                    AnimationTime="1000"
                    VisibleItemCount="10"
                    AttractorPointIndex="0"
                    PathSizingMode="Stretch" 
                    PathVisible="True"
                    PathPadding="10,10,10,10"
                    IsInvertedDirection="True"
                    IsAutoSizeItem="True"
                    IsRepeat="False" 
                    IsManipulationEnabled="False"  
                    IsEnabled="True"
                    ItemSize="30,30"
                    SnapItemsToDevicePixels="True"
                    >
    <dxca:CarouselPanel.Resources>
        <!--тут абсолютно одинаковые стили для каждого типа объекта содержимого карусели-->
        <Style TargetType="{x:Type Rectangle}" 
               BasedOn="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type dxca:CarouselPanel}, ResourceId=advancedCarouselItemStyle}}"  >
            <Setter Property="Opacity" Value="1" />
            <Setter Property="RenderTransformOrigin" Value="0.5, 0.5" />
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <TransformGroup>
                        <RotateTransform Angle="{Binding Path=(dxca:CarouselPanel.Parameters).Angle, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}}"  />
                        <TranslateTransform 
                            X="{Binding Path=(dxca:CarouselPanel.Parameters).OffsetX,  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UIElement}}}" 
                            Y="{Binding Path=(dxca:CarouselPanel.Parameters).OffsetY,  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UIElement}}}" 
                             />                                
                    </TransformGroup>
                </Setter.Value>
            </Setter>                    
        </Style>
        <Style TargetType="{x:Type Ellipse}" 
               BasedOn="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type dxca:CarouselPanel}, ResourceId=advancedCarouselItemStyle}}"  >
            <Setter Property="Opacity" Value="1" />
            <Setter Property="RenderTransformOrigin" Value="0.5, 0.5" />
            <Setter Property="RenderTransform">
                <Setter.Value>
                    <TransformGroup>
                        <RotateTransform Angle="{Binding Path=(dxca:CarouselPanel.Parameters).Angle, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}  }"  />
                        <TranslateTransform 
                            X="{Binding Path=(dxca:CarouselPanel.Parameters).OffsetX,  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UIElement}}}" 
                            Y="{Binding Path=(dxca:CarouselPanel.Parameters).OffsetY,  RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UIElement}}}" />
                    </TransformGroup>
                </Setter.Value>
            </Setter>
        </Style>
    </dxca:CarouselPanel.Resources>
    <dxca:CarouselPanel.ParameterSet>
        <dxca:ParameterCollection>
            <dxca:Parameter Name="Angle"  >
                <dxca:Parameter.DistributionFunction>
                    <dxca:PieceLinearFunction>
                        <dxca:PieceLinearFunction.Points>
                            <dxca:PointCollection> <!-- X=часть_пути  Y=угол_в_градусах(+/-)_по_часовой_стрелке -->
                                <Point X="0" Y="0" />
                                <Point X="1" Y="90" />
                            </dxca:PointCollection>
                        </dxca:PieceLinearFunction.Points>
                    </dxca:PieceLinearFunction>
                </dxca:Parameter.DistributionFunction>
            </dxca:Parameter>                
        </dxca:ParameterCollection>
    </dxca:CarouselPanel.ParameterSet>
    <dxca:CarouselPanel.ItemMovingPath>
        <PathGeometry>
            <!--путь: простая дуга из левого верхнего в правый нижний угол -->
            <PathFigure IsClosed="False" StartPoint="0,0">
                <ArcSegment Point="100,100" Size="100,100" />
            </PathFigure>
        </PathGeometry>
    </dxca:CarouselPanel.ItemMovingPath>
    <Rectangle Fill="LightCyan" />
    <Rectangle Fill="Blue"/>
    <Rectangle Fill="Green"/>
    <Rectangle Fill="Yellow"/>
    <Rectangle Fill="Purple"/>
    <Rectangle Fill="Orange"/>
    <Rectangle Fill="Red"  Width="20"  Height="50"/>
    <Ellipse Fill="DarkRed"  Width="50"  Height="50" />
</dxca:CarouselPanel>

причём угол поворота (по содержимому кусочно-линейной функции <dxca:PieceLinearFunction>) согласуется с траекторией (<dxca:CarouselPanel.ItemMovingPath>) вручную в XAML-коде.

READ ALSO
не работает метод класса

не работает метод класса

я написал простой скрипт который вносит ip клиента в БД но мне захотелось переписать его в ооп стиле

153
Отключение эмуляции запросов php 7.2

Отключение эмуляции запросов php 7.2

при выставлении атрибуту PDO::ATTR_EMULATE_PREPARES значения FALSE, возникает ошибка:

174
Запутался в многомерных массивах, хэлп))

Запутался в многомерных массивах, хэлп))

Проблема такая, есть многомерный массив, с двумя ключами AUTHORS и BOOKS, в этих ключах еще вложены массивы, ключами для авторов являются их емэйлы...

134
Связь в таблице

Связь в таблице

У меня есть две таблицы в БДМне нужно во второй таблице в поле routes_route_id сослаться на поле route_id в первой таблице, но я не могу указать связь...

161