none
¿como controlo de forma sencilla los eventos de entrada? RRS feed

  • Pregunta

  • Muy buenas el problema es que en la aplicación que estoy me he dado de que al pasar el cursor por un botón se sombrea a blanco o hace un evento que a mi no me interesa que se sombree a blanco o cuando en un botón pulsas se sombrea el botón a blanco en el evento click o el evento pointerentered que creo que es el que se activa entrando en el área de un botón o listbox de un control en definitiva como controlo que cuando le de a click no haga nada o que haga lo que a mi me interese.

    click

    http://imageshack.us/a/img836/9339/10231412.th.png

    pointerentered creo o algún evento de poner el cursor encima del control

    http://imageshack.us/a/img201/6631/78335877.png

    eso es lo que necesito controlar me he estado lo de las propiedades de dependencia y no se si se hace con eso gracias.

    bueno aquí teneis


    lunes, 18 de febrero de 2013 12:17

Todas las respuestas

  • Hola Onzulin.

    Tendrías que editar la plantilla del botón y cambiar las propiedades modificadas en el VisualState correspondiente, en concreto, en el Grupo (VisualStateGroup) "CommonStates", los estados "Pressed", "PointeOver"

                                    <VisualState x:Name="PointerOver">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Fill">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPointerOverBackgroundThemeBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPointerOverForegroundThemeBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Pressed">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OutlineGlyph" Storyboard.TargetProperty="Stroke">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Fill">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPressedForegroundThemeBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>

    y en el grupo FocusStates

                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused">
                                        <Storyboard>
                                            <DoubleAnimation
    											Storyboard.TargetName="FocusVisualWhite"
    											Storyboard.TargetProperty="Opacity"
    											To="1"
    											Duration="0"/>
                                            <DoubleAnimation
    											Storyboard.TargetName="FocusVisualBlack"
    											Storyboard.TargetProperty="Opacity"
    											To="1"
    											Duration="0"/>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Unfocused" />
                                    <VisualState x:Name="PointerFocused" />
                                </VisualStateGroup>
    

    Si te fijas, están haciendo modificaciones tanto en el borde como en el background en cada uno de los estados

    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS)
    Twitter | @saintwukong

    lunes, 18 de febrero de 2013 13:27
  • la plantilla del botón ¿Dónde se encuentra? por el standardstyle.xaml o por cual fichero a saber
    martes, 19 de febrero de 2013 12:19
  • Esto es mas fácil de modificar el tema de la animación que quiero para los eventos cpon blend de forma grafica o algo, me estoy leyendo esta documentación pero veo que no explica como hacerlo,

    http://msdn.microsoft.com/es-ES/library/windows/apps/xaml/hh452703#animaciones_integradas_para_controles

    martes, 19 de febrero de 2013 12:32
  • Hola Onzulin.

    Botón derecho sobre el botón => Editar plantilla -> Editar una copia

    Esta acción te preguntará dónde y con qué nombre quieres crear la plantilla. Mi consejo es que lo pongas en un fichero de recursos aparte para que sea reutilizable aunque lo puedes ubicar en el fichero principal de recursos app.xaml donde también será reutilizable o directamente en la propia página si sólo lo quieres local.


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS)
    Twitter | @saintwukong

    martes, 19 de febrero de 2013 12:40
  • La verdad es que en este tema estoy un poco perdido en el tema de las animaciones y demás y en MSDN esta muy extenso y no me entero, si puedes ayudarme ¿hay algún libro que lo explique? gracias.
    martes, 19 de febrero de 2013 12:57
  • No es exactamente una animación, son estados visuales que responden a determinados eventos.

    En tu caso, por ejemplo mira este estado visual Pressed

                                    <VisualState x:Name="Pressed">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OutlineGlyph" Storyboard.TargetProperty="Stroke">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BackgroundGlyph" Storyboard.TargetProperty="Fill">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemForegroundThemeBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Content" Storyboard.TargetProperty="Foreground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource AppBarItemPressedForegroundThemeBrush}"/>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>

    Si te fijas, en el ObjectAnimationUsingKeyFrames hay una propiedad Storyboard.TargetProperty que indica qué propiedad del botón es la que se va a modificar y, anidado, tiene un DiscreteObjectKeyFrame que indica el valor que se le va a aplicar. Para quitarle el Background, por ejemplo, deberías eliminar la animación que modifica la propiedad "Fill", si quisieras quitarle el borde, quita la animación que modifica el "Stroke", etc...

    Como libros, te puedo recomendar el de el gran Josue Yeray http://geeks.ms/blogs/jyeray/archive/2013/01/15/libro-desarrollo-en-windows-8-y-windows-phone-8-con-xaml-y-c.aspx


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS)
    Twitter | @saintwukong

    martes, 19 de febrero de 2013 14:10
  • ya bueno lo quiero para toda la aplicación que se aplique a todo lo que ponga en la aplicación sin tener que ir botón a botón quiero hacerlo en toda la aplicación imagino que será modificando el standarstyle.xaml,  pero que tengo que modificar es lo que no entiendo y me voy a leer de nuevo toda la pagina a ver la que te he puesto.
    martes, 19 de febrero de 2013 15:20
  • Mi recomendación es que no edites el fichero standarstyle, sino que lo hagas como te comenté, es decir, editar una copia de la plantilla y después al resto de botones que quieras que tengan ese formato, les aplicas esa plantilla.

    En cuanto a lo que tienes que modificar, es precisamente lo que te puse en el último mensaje.

    "Si te fijas, en el ObjectAnimationUsingKeyFrames hay una propiedad Storyboard.TargetProperty que indica qué propiedad del botón es la que se va a modificar y, anidado, tiene un DiscreteObjectKeyFrame que indica el valor que se le va a aplicar. Para quitarle el Background, por ejemplo, deberías eliminar la animación que modifica la propiedad "Fill", si quisieras quitarle el borde, quita la animación que modifica el "Stroke", etc..."


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    MCTS | SharePoint 2010, Application Development
    MCTS | SharePoint 2010, Configuring
    MS | Programming in HTML5 with JavaScript and CSS3 (MS)
    Twitter | @saintwukong

    martes, 19 de febrero de 2013 15:25