如下面的代码,我有一个listboxitem。 我想将listboxitem水平拖动到右边并消失。 但拖动它时,会弹出此错误,
transform.X + = e.HorizontalChange; [NullReferenceException]
我检查Watch,发现e.HorizontalChange的值为65.0,为什么显示错误?以及我如何实现目标?
<DataTemplate x:Key="TasksListDataTemplate">
<StackPanel x:Name="stackPanel" Margin="0,0,0,10" RenderTransformOrigin="0.5,0.5">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener
DragDelta="taskitem_DragDelta"
</toolkit:GestureService.GestureListener>
<TextBlock x:Name="textBlock" TextWrapping="Wrap" Text="{Binding Title}" FontSize="{StaticResource PhoneFontSizeLarge}" HorizontalAlignment="Left" Width="432" RenderTransformOrigin="0.5,0.5">
</TextBlock>
<StackPanel x:Name="stackPanel1" Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock x:Name="textBlock1" TextWrapping="Wrap" Text="due:" d:LayoutOverrides="Width" FontSize="{StaticResource PhoneFontSizeMedium}" RenderTransformOrigin="0.5,0.5">
</TextBlock>
<TextBlock x:Name="textBlock2" TextWrapping="Wrap" Text="{Binding DueDate}" d:LayoutOverrides="Width" FontSize="{StaticResource PhoneFontSizeMedium}" RenderTransformOrigin="0.5,0.5">
</TextBlock>
</StackPanel>
</StackPanel>
</DataTemplate>
并且文件后面的代码是
private void taskitem_DragDelta(object sender, DragDeltaGestureEventArgs e)
{
TranslateTransform transform = (sender as StackPanel).RenderTransform as TranslateTransform;
transform.X += e.HorizontalChange;
}
答案 0 :(得分:1)
您的StackPanel没有指定TranslateTransform
,因此.renderTransform属性在转换为TranslateTransform
时为null。
原因是元素可以有多种不同类型的变换(CompositeTransform
,ScaleTransform
,SkewTransform
,TranslateTransform
,RotateTransform
等) 。默认情况下,元素根本没有RenderTransform
。
如果使用Blend编辑XAML,CompositeTransform
是它创建的最常见类型(因为它包含一个对象中的许多不同类型的变换)。
在TranslateTransform
的声明中添加默认StackPanel
,它应该有效。
<StackPanel x:Name="stackPanel" Margin="0,0,0,10" RenderTransformOrigin="0.5,0.5">
<StackPanel.RenderTransform>
<TranslateTransform X="0" Y="0"/>
</StackPanel.RenderTransform>
作为旁注:您应该始终测试“as”操作的结果,因为它们可以为null。