{"id":14,"date":"2006-11-23T01:07:48","date_gmt":"2006-11-22T23:07:48","guid":{"rendered":"http:\/\/blog.rastersoft.com\/index.php\/2006\/11\/23\/14\/"},"modified":"2006-11-23T01:07:48","modified_gmt":"2006-11-22T23:07:48","slug":"14","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=14","title":{"rendered":"Panel desplazable"},"content":{"rendered":"<p>Una de las limitaciones del .NET <em>Compact Framework<\/em> es que, al contrario que el <em>Framework<\/em> completo, no dispone de un panel con barras de desplazamiento. El \u00fanico control que se le parece es el <strong>Panel<\/strong> (as\u00ed, a secas), que consiste en un contenedor de tama\u00f1o variable en el que se pueden insertar tantos <em>widgets<\/em> como se desee, en las coordenadas que se quiera.<\/p>\n<p>Sin embargo, para el trabajo que estoy haciendo necesitaba un panel con barras desplazables, as\u00ed que busqu\u00e9 en la red y encontr\u00e9 un truco: hacer un panel del tama\u00f1o que se necesite, colocar dentro los elementos deseados, a\u00f1adir dos barras de desplazamiento fuera del panel y hacer que \u00e9stas cambien las coordenadas X e Y de \u00e9ste, de manera que se mueva por toda la pantalla. Esta soluci\u00f3n es aceptable cuando s\u00f3lo se desea un \u00fanico panel que ocupe toda la pantalla, pero en mi caso no serv\u00eda porque yo necesitaba poder colocar m\u00e1s elementos fijos, con lo que el panel s\u00f3lo ocupar\u00eda una parte.<\/p>\n<p>La soluci\u00f3n, un tanto enrevesada, consiste en crear una nueva clase que contenga dos <em>widgets<\/em> Panel, uno dentro del otro: el externo, que definir\u00e1 la zona de visi\u00f3n y ser\u00e1 del tama\u00f1o que desee que se muestre en pantalla, y el interno, que ser\u00e1 m\u00e1s grande y contendr\u00e1 todos los <em>widgets<\/em> que necesitemos. Para conseguir el desplazamiento basta con a\u00f1adir barras de desplazamiento.<\/p>\n<p>En mi caso s\u00f3lo necesitaba desplazamiento vertical, as\u00ed que a\u00f1ad\u00ed una sola a la derecha. El evento <strong>scrolled<\/strong> ajusta la propiedad <strong>Top<\/strong> del panel interno, usando el negativo de su valor (al aumentar el valor de la barra hay que desplazar el panel negativamente). El par\u00e1metro <strong>Maximum<\/strong> de la barra toma el valor de la altura del panel interno menos uno, y el par\u00e1metro <strong>LargeChange<\/strong> la altura del panel externo. De esta manera el tama\u00f1o de la barra se ajusta autom\u00e1ticamente a la relaci\u00f3n de tama\u00f1os de ambos paneles.<\/p>\n<p><a target=\"_blank\" href=\"http:\/\/www.rastersoft.com\/descargas\/scrollpanel.cs\">El c\u00f3digo de ejemplo del panel desplazable se puede bajar aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una de las limitaciones del .NET Compact Framework es que, al contrario que el Framework completo, no dispone de un panel con barras de desplazamiento. El \u00fanico control que se le parece es el Panel (as\u00ed, a secas), que consiste en un contenedor de tama\u00f1o variable en el que se pueden insertar tantos widgets como &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=14\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Panel desplazable<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-14","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14"}],"version-history":[{"count":0,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/14\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}