Направление выпадающего эффекта следует за преобразованием RotateTransform элемента управления

#c# #wpf #xaml #user-controls #wpf-controls

#c# #wpf #xaml #пользовательские элементы управления #wpf-элементы управления

Вопрос:

Мне нужна помощь в отношении моего dropshadoweffect. в настоящее время я работаю над вращением элемента управления с помощью dropshadow. но когда я поворачиваю элемент управления, выпадающая тень также следует за направлением. это примеры изображений:

это обычный вид выпадающей тени, когда пользовательский элемент управления еще не повернут.

и это выпадающая тень после поворота элемента управления

это мой код для этого элемента управления и dropshadow:

 <local:CogWheel x:Name="CogWheel2" Width="100" Height="100" GearColor="#FF4D5D" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="105,13,0,0" RenderTransformOrigin="0.5,0.5">
                    <local:CogWheel.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform/>
                            <SkewTransform/>
                            <RotateTransform Angle="100"/>
                            <TranslateTransform/>
                        </TransformGroup>
                    </local:CogWheel.RenderTransform>
                    <local:CogWheel.Effect>
                        <DropShadowEffect Color="#FF4D5D" BlurRadius="20" ShadowDepth="12" Direction="280" Opacity="0.70"/>
                    </local:CogWheel.Effect>
                </local:CogWheel>
  

я хочу повернуть элемент управления, но сохранить направление его выпадения. любая помощь будет оценена. Спасибо!

Редактировать:

Я решил это самостоятельно, поместив элемент управления, который я поворачиваю, в прозрачную сетку и добавив вместо этого dropshadow в сетку.

Ответ №1:

Я думаю, вы можете добавить угол к направлению Shadoweffect, чтобы сохранить эффект

    var rotate = (CogWheel2.RenderTransform as TransformGroup).Children.Where(x => x is RotateTransform).FirstOrDefault() as RotateTransform;
        this.shadowEffect.Direction = 280   rotate.Angle;
  

Комментарии:

1. но знаете ли вы, как я могу получить значение угла поворота элемента управления, с которым я вращаюсь?

2. @MarkSuckSinceBirth отредактировал ответ, я не уверен, как вы выполняете вращение

3. О, я понимаю. но я также решил свой вопрос самостоятельно, я получил тот же результат, просто добавив элемент управления, с которым я вращаюсь, в другую сетку и вместо этого поместив dropshadow в сетку. и выпадающая тень не будет затронута. тем не менее, большое спасибо. я поддержал ваш ответ. Спасибо!

Ответ №2:

Применение эффекта dropshadow к родительской сетке выполняет свою работу.

Чтобы уточнить ответ Джастина СИ: привязка DropShadowEffect.Direction к the RotateTransform.Angle также работает. Это удобно, когда в игру вступают анимации.

 <local:CogWheel x:Name="CogWheel2" GearColor="#FF4D5D" RenderTransformOrigin="0.5,0.5">
    <local:CogWheel.RenderTransform>
        <RotateTransform Angle="100" x:Name="rotation"/>
    </local:CogWheel.RenderTransform>
    <local:CogWheel.Effect>
        <DropShadowEffect Direction="{Binding Angle, ElementName=rotation}" Color="#FF4D5D" />
    </local:CogWheel.Effect>
</local:CogWheel>