Исчезает и исчезает тропинка в Серебряном свете?


У меня есть путь, определенный следующим образом:

<Viewbox Visibility="Collapsed"  x:Name="Tick" Grid.Column="1" Grid.Row="1">
   <Canvas MaxWidth="100" MaxHeight="100"   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                                         Width="100" Height="100" Canvas.Left="0" Canvas.Top="0">
         <Path ...Fill="#FF00B800" x:Name="MyPath" (path dimensions, lines, etc) .../>
   </Canvas>
</Viewbox>
Теперь то, что я хотел бы сделать, это манипулировать заполнением таким образом, что это приведет к тому, что путь будет иметь эффект затухания/затухания. В основном сделать заливки Альфа-компонент либо двигаться в сторону непрозрачного или прозрачного в зависимости от того, является ли поле просмотра путь внутри видимым. Поэтому, когда видимый путь исчезает, когда свернутый путь исчезает.
1 2

1 ответ:

Эффект, которого вы пытаетесь достичь, классный, но есть серьезная проблема с вашим текущим планом. Когда Visibility элемента более высокого уровня, Viewbox в этом случае, устанавливается в Visibility.Collapsed, Элемент и все подэлементы немедленно перестают быть видимыми. Именно в этот момент Вы хотите, чтобы началось затухание Path.

Таким образом, Path уже не видно, и запуск анимации для постепенного уменьшения ее непрозрачности не принесет никакой пользы, потому что она уже исчезла. В других словом, к тому времени, когда видимость установлена в Visiblity.Collapsed, уже слишком поздно делать что-либо полезное с вещами внутри элемента, потому что пользователь их не увидит. Если бы вы могли, вы бы хотели заглянуть в будущее и знать, что вы собираетесь изменить видимость и запустить анимацию, чтобы она закончилась до того, как вы "закроете занавес" на элементе.

Та же проблема не применима к тому, когда мы делаем элемент видимым, потому что все идеально: мы становимся видимыми и начинаем исчезающая анимация. Но поскольку половина эффекта не сработает, у нас все равно остается большая проблема.

Решение этой проблемы состоит в том, чтобы переместитьна уровень выше и посмотреть, что мы пытаемся сделать. В XAML у нас есть только пассивные элементы, Viewbox, Canvas, и Path. Но, возможно, они действуют больше как элементы управления или вспомогательные элементы управления, например, будучи проверкой для элемента управления CheckBox или похожего на флажок элемента управления.

Элемент управления может иметь состояния:

  • нормальный, Наведение курсора мыши
  • Нажата, Отключена
  • Несфокусированный, Сфокусированный

И эти состояния могут иметь эффекты перехода, благодаря VisualStateManager.

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

Даже если это не так, очень действенный подход к эффектам перехода на Silverlight заключается в том, чтобы преобразуйте свои элементы в бесформенный контроль, исключительно с целью использования VisualStateManager, потому что это делает вещи настолько легкими. Возможно, эта альтернатива может сработать в вашей ситуации.