XAML定义的情节提要在C中调用时抛出null指针

本文关键字:调用 指针 null 定义 XAML | 更新日期: 2023-09-27 18:19:38

我正在尝试为按钮设置动画,这样当用户触摸按钮时图像会放大,当他释放它时图像会恢复正常,但XAML定义的情节提要在C#中调用时会抛出一个空指针。我的代码片段在下面,我完全不知道是什么造成了这个问题。

XAML:

<UserControl x:Class="Mavie_Base.GUIElements.MenuButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="200" d:DesignWidth="140">
<UserControl.Resources>
    <Storyboard x:Name="Enlarge">
        <DoubleAnimation Duration="0:0:1" From="60" To="66" Storyboard.TargetProperty="Height" Storyboard.TargetName="Rectangle"/>
    </Storyboard>
    <Storyboard x:Name="Normalize">
        <DoubleAnimation Duration="0:0:1" From="66" To="60" Storyboard.TargetProperty="Height" Storyboard.TargetName="Rectangle"/>
    </Storyboard>
</UserControl.Resources>
....
</UserControl>

C#:

private void IconContainer_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        Enlarge.Begin();
    }
    private void IconContainer_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        Normalize.Begin();
    }

XAML定义的情节提要在C中调用时抛出null指针

+1@thumbmunkeys

尽管如果是我,这听起来像是你以后可能想添加其他东西进行交互的东西,所以我只想让已经内置的功能来处理它,然后如果你想在它的功能中添加其他东西,就有空间稍后添加。我还认为(不是肯定的,必须检查一下)如果你修改高度属性,它可能会在调整时抵消屏幕上显示的其他工件,导致用户界面不太满意。

再说一遍,如果是我,我可能会做这样的事情。首先,不要摆弄可能会推动屏幕其他部分的Height/Width属性,而是点击ScaleTransform.ScaleY(和ScaleX,你会想使用我确信会得到你想要的大小的值。)来更改大小。

我也可能会把它变成一个"无表情",去掉Button,稍后再做其他选择,并处理我的事件,比如Pressed。类似于;

<Style x:Key="GrowOnPressedThingy" TargetType="Button">        
  <Setter Property="HorizontalContentAlignment" Value="Center" />
  <Setter Property="VerticalContentAlignment" Value="Center" />
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Grid x:Name="Container"
              RenderTransformOrigin="0.5,0.5">
          <Grid.RenderTransform>
            <TransformGroup>
              <ScaleTransform />
              <SkewTransform />
              <RotateTransform />
              <TranslateTransform />
            </TransformGroup>
          </Grid.RenderTransform>
          <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
              <VisualStateGroup.Transitions>
                <!-- Just left for reference -->
              </VisualStateGroup.Transitions>
              <VisualState x:Name="Normal" />
              <VisualState x:Name="MouseOver"/>
              <VisualState x:Name="Pressed">
                <Storyboard>
                  <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Container" 
                                                 Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
                    <EasingDoubleKeyFrame KeyTime="0:0:0.01" Value="1.05" />
                  </DoubleAnimationUsingKeyFrames>
                  <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Container" 
                                                 Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
                    <EasingDoubleKeyFrame KeyTime="0:0:0.01" Value="1.05" />
                  </DoubleAnimationUsingKeyFrames>
                </Storyboard>
              </VisualState>
              <VisualState x:Name="Disabled"/>
            </VisualStateGroup>
            <VisualStateGroup x:Name="FocusStates">
              <VisualState x:Name="Focused"/>
              <VisualState x:Name="Unfocused" />
            </VisualStateGroup>
          </VisualStateManager.VisualStateGroups>
          <ContentControl x:Name="contentPresenter"
                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                          Content="{TemplateBinding Content}"
                          ContentTemplate="{TemplateBinding ContentTemplate}"
                                              IsTabStop="False"/>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

这样你就可以做一个快速的;

<Button Content="whatever/image/path/blah.png" 
        Style="{StaticResource GrowOnPressedThingy}"/>

无论你在哪里需要它,你都可以轻松地添加你未来可能想到的其他整洁的UI技巧。只是在黑暗中的一个镜头,但也许值得考虑。

不管怎样,希望这能有所帮助。干杯

尝试投射targetproperty:

Storyboard.TargetProperty="(FrameworkElement.Height)"