¿Cómo arrastrar un elemento de cuadro de lista en WP7?
Frecuentes
Visto 395 veces
2
Como los códigos a continuación, tengo un listboxitem. Quiero arrastrar el elemento del cuadro de lista horizontalmente hacia la derecha y desaparecer. pero al arrastrarlo, aparece este error,
transformar.X += e.CambioHorizontal;[Excepcion de referencia nula]
Verifico el reloj, descubrí que e.HorizontalChange tiene un valor de 65.0, ¿por qué muestra un error? y ¿Cómo logro mi objetivo?
<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>
y el código detrás del archivo es
private void taskitem_DragDelta(object sender, DragDeltaGestureEventArgs e)
{
TranslateTransform transform = (sender as StackPanel).RenderTransform as TranslateTransform;
transform.X += e.HorizontalChange;
}
1 Respuestas
1
Su StackPanel no tiene un TranslateTransform
especificado, por lo que la propiedad .RenderTransform es nula cuando se convierte en TranslateTransform
.
La razón es que un elemento puede tener varios tipos diferentes de transformadas (CompositeTransform
, ScaleTransform
, SkewTransform
, TranslateTransform
, RotateTransform
etc.). Por defecto un elemento no tiene RenderTransform
en absoluto.
Si usa Blend para editar XAML a CompositeTransform
es el tipo más común que crea (ya que abarca muchos tipos diferentes de transformaciones en un objeto).
Agregar un valor predeterminado TranslateTransform
a la declaración del StackPanel
y debería funcionar.
<StackPanel x:Name="stackPanel" Margin="0,0,0,10" RenderTransformOrigin="0.5,0.5">
<StackPanel.RenderTransform>
<TranslateTransform X="0" Y="0"/>
</StackPanel.RenderTransform>
Como nota al margen: siempre debe probar el resultado de las operaciones "como", ya que pueden ser nulas.
contestado el 03 de mayo de 12 a las 14:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas silverlight windows-phone-7 datatemplate or haz tu propia pregunta.
¡Funciona a las mil maravillas! Muchas gracias por la solución y la explicación. - alberto gao