none
WPF Diagrama de Flujo, shape con texto RRS feed

  • Pregunta

  • Hola que tal, quisiera que me asesoraran por donde esta el camino para desarrollar una aplicación que me despliegue x información en un diagrama de flujo, he estado indagando con la clase shape de wpf, ya he podido crear formas (custom shapes) utilizando geometría, pero el problema que veo es el siguiente

    • Un shape no es un container y no puede contener elementos dentro de el (el texto que necesito).
    • Un user control conformado por un canvas que contenga un shape y posisionar el texto con cordenadas no me da la flexibilidad deseada ya que requiero que el tamaño del shape se ajuste a la cantidad de texto que contenga

    Soy nuevo en esto pero mi sentido común me dice que lo que quiero es un custom control con el cual pueda hacer un shape que sea un container, jamas he hecho algo parecido pero como hobby me gustaría que me dieran alguna pista por donde documentarme

    Saludos!!!

    jueves, 10 de mayo de 2012 5:16

Respuestas

  • Hola garzad.

    Se puede realizar de multitud de formas lo que quieres, todo depende de la flexibilidad y funcionalidad que requieras.

    Por ejemplo, te puedes crear un control personalizado e ir implementando la plantilla que necesites con un content control y un content presenter (seria lo mas abstracto y personalizado) o puedes coger algun control con una funcionalidad que te parezca funcional y redefinir el estilo y/o plantilla.

    Como ejemplo te pongo el mas sencillo de los 2, es la redefinicion de un estilo para un control, en este ejemplo lo hago para un boton, ya que asi se dispone de todas sus propiedades y eventos:

    codigo xaml:

        <Window.Resources>
            
            <Style TargetType="Button" x:Key="ellipseGraph">
                <!-- Establecer a 'true' para no obtener alguna propiedad del tema del control -->
                <Setter Property="OverridesDefaultStyle" Value="True"/>
                
                <!-- Establecer la plantilla que usara el control -->
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid>
                                <Ellipse Fill="{TemplateBinding Background}"/>
                                <ContentPresenter HorizontalAlignment="Center"
                                VerticalAlignment="Center"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
            
        </Window.Resources>
        
        
        <Grid>
            <Button HorizontalAlignment="Left" Background="Brown" Name="button1" Style="{StaticResource ellipseGraph}">
                Este es el contenido del boton y puede ir cualquier cosa
            </Button>
        </Grid>

    En este ejemplo he creado un estilo basico para un boton (esto puede ser para cualquier otro control de WPF/Silverlight) y le he asignado una clave para hacerle referencia.

    El codigo solo tiene una redefinicion de la plantilla para crear una elipse que ocupara todo el boton y ademas establezco una etiqueta ContentPresenter que sera la que defina la presentacion del ContentControl del boton (o sea el contenido), de modo que le digo que se centre vertical y horizontal.

    Esta plantilla se puede personalizar todo lo que se quiera, asi como crear tantas como se quieran con x:key diferentes que se pueden establecer a los botones en el codigo xaml o asignar el estilo mediante codigo.

    Con esto tienes la funcionalidad de un boton con la apariencia que tu quieras, y como un boton tiene un contentControl, puedes hacer algo como esto

            <Button HorizontalAlignment="Left" Background="Brown" Name="button1" Style="{StaticResource ellipseGraph}">
                <StackPanel>
                    <TextBlock Text="etiqueta : "></TextBlock>
                    <TextBox Text="escribir comentario"></TextBox>
                </StackPanel>
            </Button>

    de modo que puedes insertar dentro del boton lo que quieras y sera presentado como configures el ContentPresenter del estilo.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    • Marcado como respuesta garzaad viernes, 11 de mayo de 2012 4:16
    jueves, 10 de mayo de 2012 7:29