WPF interfaz IScrollInfo

La interface IScrollInfo nos permite controlar el desplazamiento de un panel en forma personalizada, esta interface cuenta con varios métodos y propiedades que nos dan acceso al control de las barras de desplazamiento, es una interface que contiene muchos miembros por lo que se puede pensar que es difícil de utilizar pero es bastante sencillo una vez entendamos su funcionamiento.

Para implementar la inteface IScrollInfo necesitaremos un ScrollBar podemos utilizar el propio control ScrollBar o decidir usar el ScrollViewer que ya nos proporciona una barra horizontal y vertical, para usar adecuadamente esta inteface debemos saber cómo trabaja el control ScrollBar.


Los métodos LineDown(), LineUp(), PageDown(), PageUp() son llamados caundo se hace click en el Repeatbutton de la barra vertical, del mismo modo LineLeft(), LineRight(), PageLeft(), PageRight() al hacer click en el Repeatbutton de la barra horizontal, del mismo modo trabajan los métodos MouseWheel__ pero con el evento de la rueda del ratón, el método MakeVisible es el encargado de hacer visible un elemento cuando este adquiere el foco por ejemplo, y por último los métodos SetHorizontalOffset() y SetVerticalOffset() son los encargados de controlar el desplazamiento horizontal y vertical respectivamente.

Tutorial Como Implementar la interface IScrollInfo

Lo primero que necesitamos es una clase que puede contener otros controles dentro de el por lo que crearemos una clase llamada ScrollPanel, heredamos de la clase Panel e implementamos la interface IScrollInfo. Compilamos el proyecto.


El siguiente paso es ir a la vista diseño y agregar un ScrollViewer estableciendo la propiedad CanContentScroll a true para indicarle que nosotros controlaremos el desplazamiento, dentro del ScrollViewer agregar un control ScrollPanel.


En este punto en la vista diseño se nos indica un error esto es porque aún no hemos implementado correctamente la interface IScrollInfo.

Volvamos a la clase ScrollPanel Agregamos un constructor para añadir algunos elementos a esta clase y reorganizamos las propiedades para hacerla auto implementadas.


Lo siguiente es configurar las propiedades ExtendedWidth y ExtendedHeight que representan el tamaño total del ScrollPanel que acabamos de crear, podríamos calcular el tamaño en el paso de mediada del nuestra clase para hacerlo sencillo supondremos que el width es de 800 y el height es de 1000 * 20 ya que agregamos 1000 TextBlock suponiendo que cada uno tenga un height de 20, las otras propiedades que debemos configurar son ViewpotWidth y ViewportHeight que representan el área que está actualmente visible supondremos que el Width es de 200 y el Heigth de 500, la propiedad ScrollOwner contiene una referencia al ScrollViewer que contiene el panel, hay que recordar llamar a InvalidateScrollInfo() para actualizar el estado de desplazamiento, en este punto podemos ejecutar el proyecto y ver el contenido con los barras de desplazamiento pero si intentamos desplazarnos se producirá una excepción.


Lo que sigue es crear un objeto TranslateTransform, inicializarlo en el contructor y asignarlo a la propiedad RenderTransaform de nuestro ScrollPanel.


Este objeto trans nos servirá para trasladar nuestro ScrollPanel horizontal y verticalmente, esto lo haremos en los métodos SetHorizontalOffset() y SetVerticalOffset() respectivamente, haremos lo siguiente:


Con esto nos podremos desplazar al arrastrar el Thumb pero si hacemos click en un Repeatbutton lanzara una excepción para evitar esto solo bastará con llamar a uno de los métodos anteriores con los valores deseados.

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

tkinter Canvas

Histogramas OpenCV Python

Python Binance API