2009-11-25 2 views
0

Это то, что у меня естьРаскадровка анимации на основе свойства элемента управления шаблоном контрольной

  1. A ControlTemplate для кнопки в моем window.resource, имея эллипс с outerglow (названных - TasksToggleButtonOuterGlowBitmapEffect) и текстом
  2. кнопка, которая использует этот шаблон

Это то, что мне нужно

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

Когда я попытался с помощью следующего фрагмента кода, структура дает мне время выполнения исключение о том, что он не в состоянии найти контроль, TasksToggleButtonOuterGlowBitmapEffect

<Window.Resource> 
    <ControlTemplate x:Key="DefaultTasksToggleButtonTemplate" TargetType="ToggleButton"> 
     <Grid Margin="2"> 
      <Border BorderBrush="White" BorderThickness="2" CornerRadius="20"> 
       <Border.BitmapEffect> 
        <OuterGlowBitmapEffect x:Name="TasksToggleButtonOuterGlowBitmapEffect" GlowColor="LightGray" /> 
       </Border.BitmapEffect> 
      </Border> 
      <Ellipse Fill="Red" Width="20" Height="20" Margin="2" /> 
      <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" /> 
     </Grid> 
    </ControlTemplate> 


    <Storyboard x:Key="GlowStoryboard"> 
     <DoubleAnimation Storyboard.TargetName="TasksToggleButtonOuterGlowBitmapEffect" Storyboard.TargetProperty="GlowSize" From="5" To="10" /> 
    </Storyboard> 

</Window.Resources> 

Update - Я хочу, чтобы это было в ресурсе, так что любая кнопка может использовать его

ответ

0

На первый взгляд это кажется мне хорошим кандидатом на использование Visual State Manager. Анимация немного тяжела для такого эффекта, если триггер будет чем-то вроде MouseOver, Pressed и т. Д. Если вы планируете реагировать на состояние Button, то обязательно посмотрите на VSM.

Проблема, с которой вы сталкиваетесь, заключается в том, что цель, к которой вы пытаетесь получить доступ, является частью шаблона и, следовательно, не является реальным элементом. Имеет смысл, что вы не можете сделать это так: представьте, что у вас было 50 кнопок, применяющих один и тот же шаблон: как анимация узнает, что TasksToggleButtonOuterGlowBitmapEffect вы действительно имели в виду?

Возможно, вам удастся обработать это в триггерах (если это WPF), но я думаю, что для этого нужно будет также определять анимацию внутри шаблона, и я не знаю, можете ли вы сделать что.

Вы также можете перемещаться по дереву шаблонов во время выполнения кода и настраивать свою анимацию.

+0

Только что увидела опубликованную ссылку PanJanek: у этого поста есть ответ. Я не знал, что вы можете передать шаблон анимации, это круто! –

Смежные вопросы