2011-01-26 18 views
8

¿Hay alguna manera de asignar un evento de clic a las imágenes? Me gustaría asignar eventos a los botones eliminar y buscar dentro de mi lista que muestra mis datos. ¿Hay alguna manera de hacer esto usando el control de imagen o tengo que crear un estilo en BLEND para un botón?WP7 - ¿Evento de clic de imagen?

 <ListBox x:Name="lbPills" ItemsSource="{Binding pillItemsCollection}" SelectionChanged="lbPills_SelectionChanged"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel x:Name="DataTemplateStackPanel" Orientation="Horizontal"> 
         <TextBlock FontFamily="Segoe WP Semibold" FontWeight="Bold" FontSize="30" VerticalAlignment="Top" Margin="20,0">*</TextBlock> 
         <StackPanel> 
          <TextBlock x:Name="ItemText" Text="{Binding Name}" Margin="-2,-13,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
         </StackPanel> 

         <Image Source="Images/delete.png" Margin="10,0"/> 
         <Image Source="Images/search.png" Margin="10,0"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Respuesta

9

Puede usar el detector de gestos para detectar eventos tap (clic). Un tutorial aquí.

WP7 Tip of the Day: Silverlight Toolkit: Gestures

Como alternativa, puede colocar su imagen en un control Button y retemplate en mezcla para tener la apariencia que desea.

+0

¿Hay una manera de añadir una identificación o el valor del índice a la imagen usando gestos para que pueda decir qué elemento de la colección se seleccionó cuando se hizo clic en el botón? – webdad3

+0

/All - ¡Los gestos funcionó muy bien! Estoy usando SelectionChanged = "lbPills_SelectionChanged" para descubrir en qué elemento de la colección se hizo clic. ¡Gracias por tu ayuda! – webdad3

+0

El tutorial vinculado no existe. –

2

controlar el evento ManipulationCompleted (que es cualquier toque, doble toque, deslizar, caricia o acarician) a su imagen (s). Entonces:

<Image Source="Images/delete.png" Margin="10,0"/> se convierte en <Image x:Name="ImageDelete" ManipulationCompleted="ImageDelete_ManipulationCompleted" Source="Images/delete.png" Margin="10,0"/>. Luego, en el controlador ImageDelete_ManipulationCompleted, rastrea desde donde vino desde el sender y haz lo tuyo.

Si solo desea rastrear un deslizamiento en lugar de un toque, simplemente haga una instrucción if en el e.IsInertial desde ManipulationCompletedEventArgs.

13

Que yo sepa no hay oyentes en la imagen en sí para los eventos de clic y gesto (deberán adjuntarse a través de gestos como se mencionó anteriormente). Una manera de abordar esto es volver a la plantilla del botón:

 <Button> 
      <Button.Template> 
       <ControlTemplate> 
        <Image Source="Images/delete.png" Margin="10,0"/> 
       </ControlTemplate> 
      </Button.Template> 
     </Button> 

En el establecimiento de la plantilla en el botón va a reemplazar la plantilla predeterminada utilizada por el teléfono (que tiene el relleno adicional, borde grueso, etc.) . El uso de este método le permitirá vincularse al evento de clic de botón.

+2

También me gusta esta respuesta. –

+1

Solo quería que supieras, probé tu respuesta para otro botón que estaba usando donde quería contener una imagen y ¡funcionó muy bien! ¡Gracias! – webdad3

+0

Me alegro de haber podido ayudar :) – avanek

0

Si su ListBox no es en un control Panorama, entonces se podría simplemente controlar el evento SelectionChanged para el cuadro de lista y luego mostrar las opciones de eliminación y de búsqueda en un ApplicationBar de la página.

0

Lo hago con MouseLeftButtonDown y MouseLeftButtonUp. Reemplaza la pestaña o hace clic en el dispositivo como si tuviera clic en el evento en la PC con el mouse. Funciona en mi aplicación. Solo prueba esto y serás feliz, supongo.

0

Se trabajó de esta manera para mí (Haciendo Relleno = "- 10" quita el borde del botón y el relleno dentro del botón)

<Button x:Name="Channells" Click="Thumb_Click" Padding="-10" > 
     <Image 
      VerticalAlignment="Center" 
      Source="Assets/Images/thumb2.jpg"/> 
</Button> 

* .cs

void Thumb_Click(object sender, RoutedEventArgs e) 
    { 
     Debug.WriteLine("Thumb Clicked"); 
    } 
Cuestiones relacionadas