none
商店应用触摸会导致应用崩溃,鼠标却无问题 RRS feed

  • 问题

  • XAML如下

            <Grid x:Name="FloatingRoot" Visibility="Collapsed">
            	<Grid.Projection>
                    <PlaneProjection  CenterOfRotationX="0.5" CenterOfRotationY="0.5"/>
            	</Grid.Projection>
                <Rectangle x:Name="FloatingBackground" Fill="Transparent" />
                <Grid x:Name="FloatingContainer">
                </Grid>
            </Grid>

    动画XAML

    		<Storyboard x:Name="FloatingFlipOver">
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.GlobalOffsetZ)" Storyboard.TargetName="FloatingRoot">
    				<EasingDoubleKeyFrame KeyTime="0" Value="-2000"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <QuarticEase/>
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="FloatingRoot">
    				<EasingDoubleKeyFrame KeyTime="0" Value="180"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <QuarticEase/>
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="FloatingRoot">
                    <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="1"/>
                </DoubleAnimationUsingKeyFrames>
    		</Storyboard>

    使用如下代码添加控件

    FloatingContainer.Children.Add(element);//FrameworkElement element
    story = this.Resources["FloatingFlipOver"] as Storyboard;
    FloatingRoot.Opacity = 0;
    FloatingRoot.Visibility = Visibility.Visible;
    story.Begin();

    被添加的元素的Tapped事件代码

    FloatingRoot.Visibility = Visibility.Collapsed;
    FloatingContainer.Children.Clear();

    问题来了,第一次是没问题的,可以显示,并且能够关闭。

    但再次打开开时,如果是用鼠标去点击控件产生Tapped事件就没有问题,用手触摸的话就会导致应用崩溃,是那种没有抛出任何异常,也没有异常信息的崩溃。

    如果没有上面那段动画的话,则无论是鼠标还是触摸都没问题,不知道具体问题出在什么地方了,是什么导致应用崩溃?如何去避免?


    --!

    2013年1月15日 14:51

答案

  • 这的确是个issue,现在已经找到方法绕过问题了,附上链接

    http://www.cnblogs.com/bullatus/archive/2013/01/22/2871469.html


    --!

    • 已标记为答案 Bunliney 2013年1月23日 2:23
    2013年1月23日 2:23

全部回复

  • 我测试过了鼠标点击添加的元素或者用手触摸添加的元素没有问题,你可以看看我的Sample Code与如下截图

    <Page
        x:Class="App1.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:App1"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
        <Page.Resources>
            <Storyboard x:Name="FloatingFlipOver">
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.GlobalOffsetZ)" Storyboard.TargetName="FloatingRoot">
                    <EasingDoubleKeyFrame KeyTime="0" Value="-2000"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <QuarticEase/>
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="FloatingRoot">
                    <EasingDoubleKeyFrame KeyTime="0" Value="180"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0">
                        <EasingDoubleKeyFrame.EasingFunction>
                            <QuarticEase/>
                        </EasingDoubleKeyFrame.EasingFunction>
                    </EasingDoubleKeyFrame>
                </DoubleAnimationUsingKeyFrames>
                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="FloatingRoot">
                    <EasingDoubleKeyFrame KeyTime="0" Value="0"/>
                    <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="1"/>
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
        </Page.Resources>
        
        <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    
            <Grid x:Name="FloatingRoot" Visibility="Collapsed" Width="500" Height="300">
                <Grid.Projection>
                    <PlaneProjection  CenterOfRotationX="0.5" CenterOfRotationY="0.5"/>
                </Grid.Projection>
                <Rectangle x:Name="FloatingBackground" Fill="SkyBlue" />
                <Grid x:Name="FloatingContainer">
                </Grid>
            </Grid>
            <Button Content="Test" HorizontalAlignment="Left" Margin="46,36,0,0" VerticalAlignment="Top" Click="Test_Click"/>
        </Grid>
    </Page>
    
    namespace App1
    {
    
        public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                this.InitializeComponent();
            }
    
            void msiBtn_Tapped(object sender, TappedRoutedEventArgs e)
            {
                FloatingRoot.Visibility = Visibility.Collapsed;
                FloatingContainer.Children.Clear();
            }
    
            private void Test_Click(object sender, RoutedEventArgs e)
            {
                Button msiBtn = new Button();
                msiBtn.Content = "addBtn";
                msiBtn.Width = 100; msiBtn.Height = 50;
                msiBtn.Tapped += msiBtn_Tapped;
                FloatingContainer.Children.Add(msiBtn);//FrameworkElement element
    
                FloatingRoot.Opacity = 0;
                FloatingRoot.Visibility = Visibility.Visible;
    
                FloatingFlipOver.Begin();
            }
        }
    }



    2013年1月16日 0:20
  • Dear Bunliney :

    你运行后还有触摸崩溃现象么?应该不会有了

    2013年1月17日 12:46
  • 我的代码是封装在一个UserControl中的,UserControl为FlipView的Item,不知道和这个有没有关系。

    而且崩溃现象也是时有时无的。

    我运行你的代码后没有问题,就连我工程里原来发生崩溃的地方也没问题了……


    --!

    2013年1月18日 8:21
  • Bug╮(╯▽╰)╭
    2013年1月18日 8:23
  • 刚才又试验了一下,目前在Grid里面放的是Image的时候才会崩溃,而且在我模拟器上不会,surface上会崩溃

    • 已编辑 Bunliney 2013年1月18日 9:01
    2013年1月18日 8:57
  • 你将FloatingContainer嵌套在FlipView中应该就可以看见我说的问题了。

    例如

                <FlipView>
                    <Grid x:Name="FloatingContainer" Width="300" Height="300">                    
                    </Grid>
                </FlipView>


    --!

    2013年1月18日 15:55
  • 这的确是个issue,现在已经找到方法绕过问题了,附上链接

    http://www.cnblogs.com/bullatus/archive/2013/01/22/2871469.html


    --!

    • 已标记为答案 Bunliney 2013年1月23日 2:23
    2013年1月23日 2:23