2012-04-14 41 views
1

我试图将样式应用于所有按钮。当我我的风格分配给第二个按钮,并尝试运行我的应用程序,我得到一个错误:WP7将样式应用于多个按钮

A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.dll 
A first chance exception of type 'MS.Internal.WrappedException' occurred in System.Windows.dll 
A first chance exception of type 'MS.Internal.WrappedException' occurred in System.Windows.dll 

运用我的风格,以一个按钮,将工作。

这是我的风格:

<phone:PhoneApplicationPage.Resources> 
     <Style x:Key="ButtonStyle1" TargetType="Button"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Grid Background="Transparent"> 
          <VisualStateManager.VisualStateGroups> 
           <!--Define the states for the common states. The states in a 
             VisualStateGroup are mutually exclusive to each other.--> 
           <VisualStateGroup x:Name="CommonStates"> 
            <!--Define the VisualStates in this VistualStateGroup.--> 
            <VisualState x:Name="Normal"/> 
            <VisualState x:Name="MouseOver" /> 
            <VisualState x:Name="Pressed"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneBackgroundBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneForegroundBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ColorAnimation Duration="0" To="White" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground" d:IsOptimized="True"/> 
             </Storyboard>           
            </VisualState> 
            <VisualState x:Name="Disabled"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" To="1"/> 
             </Storyboard> 
            </VisualState> 
            </VisualStateGroup> 
           <!--Define the states for the focus states. The states in a 
             VisualStateGroup are mutually exclusive to each other.--> 
           <VisualStateGroup x:Name="FocusStates"> 
            <!--Define the VisualStates in this VistualStateGroup.--> 
            <VisualState x:Name="Focused" /> 
            <VisualState x:Name="Unfocused" /> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}" Background="{TemplateBinding Background}"> 
           <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
          </Border> 
         </Grid> 
         <!--The parts of the button control will be defined here.--> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </phone:PhoneApplicationPage.Resources> 

这里是我的按钮:

<Button Height="121" HorizontalAlignment="Left" Margin="14,61,0,0" Name="but1" VerticalAlignment="Top" Width="197" Background="#FF7D0000" BorderBrush="Black" Foreground="Red" BorderThickness="0" Padding="0" Style="{StaticResource ButtonStyle1}" /> 
<Button Height="121" HorizontalAlignment="Left" Margin="217,61,0,0" Name="but2" VerticalAlignment="Top" Width="200" Background="#FF7D0000" BorderBrush="Black" Foreground="Red" BorderThickness="0" Padding="0" Style="{StaticResource ButtonStyle1}" /> 

解决方案

我改成了反映 “ContentContainer”,这是对象的名称我想在我的风格内进行修改。

<VisualState x:Name="Disabled"> 
    <Storyboard> 
     <DoubleAnimation Duration="0" Storyboard.TargetName="ContentContainer" Storyboard.TargetProperty="Opacity" To="1"/> 
    </Storyboard> 
</VisualState> 

回答

1

如果只是上面的代码应该工作正常,但如果你设置任何的按键被禁止(IsEnabled = false),它会失败,因为在你的风格的禁用状态,故事板正在寻找命名为DisabledVisualElement动画元素,

<VisualState x:Name="Disabled"> 
    <Storyboard> 
    <DoubleAnimation Duration="0" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" To="1"/> 
    </Storyboard> 
</VisualState> 

然而,存在范围不存在这样的元素。

删除此故事板或添加具有正确名称的元素将解决您的问题。

+0

感谢您的提示。我认为DisabledVisualElement是某种“常量”......事实并非如此。我修改它以反映 TekiusFanatikus 2012-04-14 13:55:11

+0

很高兴帮助! – 2012-04-14 14:32:58