2012-05-03 6 views
2

아래의 코드처럼 listboxitem이 있습니다. listboxitem을 오른쪽으로 수평으로 드래그하여 사라지려고합니다. 하지만 드래그하면이 오류가 표시됩니다.WP7에서 listboxitem을 드래그하는 방법은 무엇입니까?

변형 .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> 

및 파일 뒤에 코드는 StackPanel의이 TranslateTransform가 지정되어 있지 않기 때문에 TranslateTransform으로 캐스팅 할 때 .RenderTransform의 속성이 null

private void taskitem_DragDelta(object sender, DragDeltaGestureEventArgs e) 
    { 
     TranslateTransform transform = (sender as StackPanel).RenderTransform as TranslateTransform; 
     transform.X += e.HorizontalChange; 
    } 

답변

1

입니다.

이유는 변환 소자 (CompositeTransform, ScaleTransform, SkewTransform, TranslateTransform, RotateTransform 등)의 다양한 유형들을 가질 수 있다는 것이다. 기본적으로 요소에는 RenderTransform이 전혀 없습니다.

블렌드를 사용하여 XAML을 편집하는 경우 CompositeTransform이 가장 일반적인 형식인데 (하나의 개체에 여러 가지 유형의 변환이 포함되어 있으므로).

StackPanel의 선언에 기본값 TranslateTransform을 추가하면 제대로 작동합니다. 보조 노트로

<StackPanel x:Name="stackPanel" Margin="0,0,0,10" RenderTransformOrigin="0.5,0.5"> 
    <StackPanel.RenderTransform> 
     <TranslateTransform X="0" Y="0"/> 
    </StackPanel.RenderTransform> 

: 그들은 null이 될 수있는 당신은 항상 "으로"작업의 결과를 테스트해야합니다.

+0

매력처럼 작동합니다. 해결책과 설명에 감사드립니다. –

관련 문제