2011-01-19 24 views
-1

我有一個Button控件,我正在定義一個自定義模板。使用一些Storyboard的我可以用DoubleAnimation成功操縱控制屬性,命名轉換和效果;問題出現了,使用PointAnimation時,一個InvalidOperationException被拋出,每VS:Cannot resolve TargetName OverlayEllipse.將PointAnimation的TargetName設置爲資源拋出的名稱InvalidOperationException(XAML/Silverlight)

的動畫代碼發起的,簡單地說:

private void Button_MouseEnter(object sender, MouseEventArgs e) 
{ 
    PopUpStoryboard.Begin(); 
} 

和相關的XAML:

<Button ...>  
    <Button.Resources> 
     <RadialGradientBrush 
      x:Name="OverlayBrush" ...> 
      <RadialGradientBrush.GradientStops> 
       ... 
      </RadialGradientBrush.GradientStops> 
     </RadialGradientBrush> 
     <Storyboard x:Name="PopUpStoryboard"> 
      ... 
      <PointAnimation 
       Storyboard.TargetName="OverlayEllipse" 
       Storyboard.TargetProperty="(Shape.Fill)(RadialGradientBrush.GradientOrigin)" 
       Duration="0:0:.1" 
       To="0.9,1.2"/> 
     </Storyboard> 
    <Button.Resources> 
    <Button.Style> 
     <Style TargetType="Button"> 
      ... 
      <Setter Property="Template"> 
       <Setter.Value>  
        <ControlTemplate> 
         <Grid> 
          ...       
          <Ellipse x:Name="OverlayEllipse" Fill="{StaticResource OverlayBrush}"/> 
          ... 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Button.Style> 
</Button> 

Ellipse可以解析資源,很明顯,因爲它顯示得很好,異常直接從Storyboard.Begin調用拋出。我怎樣才能糾正我爲了讓Storyboard能夠按名稱解析資源?

我曾想過使用StaticResource綁定,但是,考慮到它直接指向對象而不是它的名稱,它不起作用。我只是試圖設置Target,而不是TargetName,使用StaticResource結合 - 這給了我一個生成錯誤(很奇怪?)指出:The property 'Target' does not exist on the type 'PointAnimation' in the namespace http://schemas.microsoft.com/winfx/2006/xaml/presentation '.

感謝。

回答

1

不是定位資源,而是定位控件(橢圓)上的屬性。添加(Shape.Fill)以定位GradientOrigin

<PointAnimation 
    Storyboard.TargetName="OverlayEllipse" 
    Storyboard.TargetProperty="(Shape.Fill).(RadialGradientBrush.GradientOrigin)" 
    Duration="0:0:.1" 
    To="0.9,1.2"/> 

編輯:這是一個完整的示例按鈕樣式。

<Style x:Key="ButtonStyle1" TargetType="Button"> 
    <Setter Property="Background" Value="#FF1F3B53"/> 
    <Setter Property="Foreground" Value="#FF000000"/> 
    <Setter Property="Padding" Value="3"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="BorderBrush"> 
    <Setter.Value> 
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
     <GradientStop Color="#FFA3AEB9" Offset="0"/> 
     <GradientStop Color="#FF8399A9" Offset="0.375"/> 
     <GradientStop Color="#FF718597" Offset="0.375"/> 
     <GradientStop Color="#FF617584" Offset="1"/> 
     </LinearGradientBrush> 
    </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="Button"> 
     <Grid> 
      <Grid.Resources> 
      <RadialGradientBrush x:Key="Brush1" GradientOrigin="0.5,0.5"> 
        <GradientStop Color="White" Offset="0"/> 
        <GradientStop Color="#F9FFFFFF" Offset="0.375"/> 
        <GradientStop Color="#E5FFFFFF" Offset="0.625"/> 
        <GradientStop Color="#C6FFFFFF" Offset="1"/> 
        </RadialGradientBrush> 
      </Grid.Resources> 
      <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Normal"/> 
       <VisualState x:Name="MouseOver"> 
       <Storyboard> 
        <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundAnimation"/> 
        <PointAnimation Duration="0" To="0,0.5" Storyboard.TargetProperty="(Shape.Fill).(RadialGradientBrush.GradientOrigin)" Storyboard.TargetName="BackgroundGradient" d:IsOptimized="True"/> 
       </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Pressed"> 
       <Storyboard> 
        <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BackgroundAnimation"/> 
       </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Disabled"> 
       <Storyboard> 
        <DoubleAnimation Duration="0" To=".55" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="DisabledVisualElement"/> 
       </Storyboard> 
       </VisualState> 
      </VisualStateGroup> 
      <VisualStateGroup x:Name="FocusStates"> 
       <VisualState x:Name="Focused"> 
       <Storyboard> 
        <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisualElement"/> 
       </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Unfocused"/> 
      </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
      <Border x:Name="Background" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3"> 
      <Grid Background="{TemplateBinding Background}" Margin="1"> 
       <Border x:Name="BackgroundAnimation" Background="#FF448DCA" Opacity="0"/> 
       <Rectangle x:Name="BackgroundGradient" Fill="{StaticResource Brush1}"> 
       </Rectangle> 
      </Grid> 
      </Border> 
      <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
      <Rectangle x:Name="DisabledVisualElement" Fill="#FFFFFFFF" IsHitTestVisible="false" Opacity="0" RadiusY="3" RadiusX="3"/> 
      <Rectangle x:Name="FocusVisualElement" IsHitTestVisible="false" Margin="1" Opacity="0" RadiusY="2" RadiusX="2" Stroke="#FF6DBDD1" StrokeThickness="1"/> 
     </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
+0

當我回家的時候給我一個鏡頭,要做幾個小時的工作 - 會讓你知道它是如何變成的,謝謝。 – 2011-01-20 11:05:16

相關問題