«Hacer clic en» textblock?

Tengo un WP7 aplicación, donde me gustaría tener un «hacer clic en» TextBlock área, que cuando un usuario hace clic en el TextBlock, se pone en modo de edición (un control diferente).
Esto habría que añadir otro explícita paso para un usuario antes de la edición de texto.

No hay ningún evento click para el TextBlock (que no me sorprende).

Hay alguna forma de hacer esto? Envuelto en otro control, o algo similar?

InformationsquelleAutor pearcewg | 2010-11-29

7 Kommentare

  1. 21

    Sí, hay un evento click. Su llamado MouseLeftButtonDown

    textBlock1.MouseLeftButtonDown +=new MouseButtonEventHandler(textBlock1_MouseLeftButtonDown);
    
    private void textBlock1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
    
    }
    • Que funcionó a la perfección. Gracias!
    • Compruebe que el evento no se dispara cuando el usuario se desplaza. El Clic de un botón es lo suficientemente inteligente como para ser cancelado cuando el usuario estaba empezando un gesto/deslizar.
    • También un buen punto de Lucas.
    • Según mis pruebas, MouseLeftButtonUp actúa exactamente como haga clic en. ¿Por qué no probar eso?
    • Tenga en cuenta que 7.1 (Mango) añade el Toque de eventos.
  2. 12

    Me han resuelto mediante la creación de un Botón con el TextBlock dentro de su Plantilla como esta:

    <Button Click="button_Click">
        <Button.Template>
            <ControlTemplate>
                <TextBlock ... />
            </ControlTemplate>
        </Button.Template>
    </Button>

    Es un poco más marcado, pero no es necesario escribir ningún código, es proporcionada por el marco y funciona correctamente.

    • Esta casi trabajó para mí, me acabas de quitar las etiquetas de Plantilla
    • ¿a qué te refieres?
    • Esta parecería ser la más correcta respuesta
  3. 7

    Puede asociar un evento de clic mediante el gesto de apoyo.

    edición: por hacerlo de esta forma, su comportamiento es consistente con un Clic (pulse) con respecto al usuario mover el dedo sobre la pantalla durante la operación. Haga clic en no el fuego bajo mousedown, mover fuera de control, mouseup. Toque gesto funciona de la misma. No todos los usuarios saben que pueden abortar un clic moviendo su ratón o el dedo, pero algunos lo hacen y te pillan en esto si que no manejan correctamente. MouseLeftButtonUp funciona el manejo de la misma forma, pero yo no lo recomiendo confiar en esto como es, no por diseño, y pueden haber cambios imprevistos o conflictos con otros controles.

    • keep it simple!
    • No estoy de acuerdo con el razonamiento de su voto. No estoy de acuerdo con su solución también. MouseLeftButton abajo no es behaviourly consistente con un evento de clic en todos los casos. Alegan que mantener las cosas simples, yo diría que la marcada respuesta es una aproximación a la solución. Siento que no hay motivo para retirar esta respuesta como resultado de su voto.
    • +1, no hay razón para un downvote aquí. Buen consejo acerca gesto de apoyo!
  4. 5

    Hay varias respuestas que consejos para utilizar MouseLeftButton eventos, pero he visto un montón de ejemplos en los que este enfoque va mal.
    Recomiendo el lugar TextBlock (u otro control/controles) en un Botón con un estilo personalizado (eliminado todas las fronteras y márgenes, excepto de control de contenido). Es MUCHO MUCHO MEJOR!

     <Button Style={StaticResource OnlyContentStyle}>
          <Button.Content>
               <TextBlock />
          </Button.Content>
     </Button>
    • no funciona en Windows Phone
    • usted necesita para crear OnlyContentStyle estilo como lo mencioné en mi respuesta
    • y, ¿cómo hacer eso? Creo que su idea es mucho mejor, pero su respuesta no es muy meticuloso. También hay algunas citas que faltan…
    • Sírvanse explicar con más detalle cómo crear ese estilo para ser utilizado por el botón.
    • En la Mezcla: a la derecha haga clic en el Botón editar Plantilla – Editar una Copia. Que quitar todos los Bordes, animaciones y así sucesivamente
  5. 3

    Otra forma de hacerlo es utilizando Seva solución, pero añadiendo un poco más de modo que el desplazamiento no se disparará el «Clic»

    bool _IsMouseDown = false;
    
    private void Textblock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        _IsMouseDown = true;
    }
    
    private void Textblock_MouseLeave(object sender, MouseEventArgs e)
    {
        _IsMouseDown = false;
    }
    
    private void Textblock_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        if (_IsMouseDown)
        {
            _IsMouseDown = false;
    
            //ITS a CLick do something!
            Textblock clickedButton = (Textblock)sender;
            AddNumberToRolledNumbers(Convert.ToInt32(clickedButton.Tag),clickedButton.Background );
         }
    }
  6. 2

    Parece que usted sólo necesita un botón. Cambiar la plantilla de control para quitar el borde de estilo, etc. y hacer que su propia (o borrar los existentes) de estados visuales. O incluso modificar la ‘depresión’ el estado le da un poco de proyección en 3D.

    También, con un botón, usted puede también utilizar el Comando en el botón si usted está usando MVVM.

    Lucas

  7. 0
    private void txtPersonName_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var txtPersonName = e.OriginalSource as TextBlock;
    
            if (txtPersonName == null) return;
    
            MouseButtonEventHandler eveMouseLeftButtonUp = (sen, eve) => NavigationService.Navigate(new Uri("/Views/PersonPage.xaml?personId=" + txtPersonName.Tag, UriKind.RelativeOrAbsolute));
            MouseEventHandler eveMouseMove = (sen, eve) => txtPersonName.MouseLeftButtonUp -= eveMouseLeftButtonUp;
    
            txtPersonName.MouseLeftButtonUp += eveMouseLeftButtonUp;
            txtPersonName.MouseMove += eveMouseMove;
        }

    Yo prefiero agregar un evento y hacer el resto de forma dinámica.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea