• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kombypetras

Problemas com a resolução do ecrã numa aplicação WPF

4 mensagens neste tópico

Boas pessoal.

Estou a construir um programa que surgiu duma brincadeira e deparei-me com o seguinte:

Construí uma aplicação WPF com varios objectos e queria o seguinte:

- quando maximizo ou diminuo o tamanho da janela esta mantenha os objectos todos organizados e certos.

- segundo ponto quando mudo a resolução do ecrã esta se ajuste a mesma, visto que passei a aplicação a aum colega e quando a iniciou esta ficou com os objectos todos fora do lugar.

Nao sei se me fiz entender mas gostava que alguém me desse uma dica para eu resolver o problema.

Desde já agradeço a todos os que se preocuparem em ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de ser mais concreto.

Não sei o que queres dizer com aumentar de resolução os objectos saírem do lugar.

Uma das vantagens do WPF é não se ter de preocupar muito com a variação da resolução. Se aumentares/diminuires tudo devia aumentar/encolher de forma automática e bater tudo certo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O melhor é veres uns tutoriais. Tens de usar uma Grid onde vais colocar todos os objectos/controlos. Para além disso, convém usares um stackpanel para melhor organizares os controlos e não acontecer o que dizes.

Vê aqui: LINK

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas,

percebi o que pretende, tive o mesmo problema...vamos lá ver se me explico.

Cada Window tem que ter um "Layout Control".

Layout Controls: Grid, UniformGrid, StackPanel, WrapPanel, DockPanel, Canvas.

Dentro do teu layout control, vais inserir os vários controlos que queres apresentar na window.

O que normalmente faço é:

1º Crio uma Grid como sendo o Layout Control

2º Começo por definir as margens da window, criando colunas e linhas

 <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Name="Top" Height="10" />
            <RowDefinition Name="MiddleRow" Height="*" />
            <RowDefinition Name="Bottom" Height="10" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="Left" Width="10" />
            <ColumnDefinition Name="MiddleColumn" Width="*" />
            <ColumnDefinition Name="Right" Width="10" />
        </Grid.ColumnDefinitions>
    </Grid>

como podem ver pelo xaml que apresento, a linha Top e Bottom irão ter sempre uma altura de 10 e a coluna Right e Left irão ter sempre uma largura de 10.

Tanto MiddleColumn e MiddleRow vão ocupar o resto do espaço, sendo esse o significado do *.

3º Vou inserir um botão na grid.

 <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Name="Top" Height="10" />
            <RowDefinition Name="MiddleRow" Height="*" />
            <RowDefinition Name="Bottom" Height="10" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="Left" Width="10" />
            <ColumnDefinition Name="MiddleColumn" Width="*" />            
            <ColumnDefinition Name="Right" Width="10" />
        </Grid.ColumnDefinitions>
        <Button Grid.Column="1" Grid.Row="1"> clica aqui</Button>
    </Grid>

no xaml podem ver que coloco o botão no MiddleColumn e MiddleRow e como não defino qual é a altura e a largura do botão, o botão irá ocupar todo o espaço dentro daquela "célula", quer aumentes ou diminuas o tamanho da window, o botão está centro dentro daquele espaço.

O comportamento do botão é aquele que nós lhe dermos,

se eu definir a Margin, HorizontalAlignment, VerticalAlignment,Width ou  Height o botão deixa logo de ocupar td os espaço e fica posicionado de acordo com o que lhe foi definido.

Normalmente não defino estas propriedades, a mais que se mesmo obrigatório.

É importante definir logo a partida qual a forma como queremos ver os controlos na window, e depois usar a grid, ou outro layout control para ajudar a posicionar os elementos.

Espero que tenho percebido, deixo aqui o xaml de uma window

<Window x:Class="WpfApplication1.SampleWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="SampleWindow" Height="325" Width="435">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="10" />
            <RowDefinition Height="23" />
            <RowDefinition Height="10" />
            <RowDefinition Height="200" />
            <RowDefinition Height="10" />
            <RowDefinition Height="*" />
            <RowDefinition Height="10" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="200" />
            <ColumnDefinition Width="10" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="10" />
        </Grid.ColumnDefinitions>
        <Label Grid.Column="1" Grid.Row="1">Título dos elementos da ListBox</Label>
        <ListBox Grid.Column="1" Grid.Row="3">
            <ListBox.Items>
                <ListBoxItem>Item 1</ListBoxItem>
                <ListBoxItem>Item 2</ListBoxItem>
                <ListBoxItem>Item 3</ListBoxItem>
            </ListBox.Items>
        </ListBox>
        <Label Grid.Column="3" Grid.Row="1">Título dos elementos da ListView</Label>
        <ListView Grid.Column="3" Grid.Row="3">
            <ListView.View>
                <GridView>
                    <GridViewColumn Width="100">Descrição</GridViewColumn>
                </GridView>
            </ListView.View>
            <ListView.Items>
                <ListViewItem>Item 1</ListViewItem>
                <ListViewItem>Item 2</ListViewItem>
                <ListViewItem>Item 3</ListViewItem>
            </ListView.Items>
        </ListView>
        
        <Button Grid.Column="1" Grid.Row="5">sou um botão que ocupo o espaço todo</Button>
        <Button Grid.Column="3" Grid.Row="5" HorizontalAlignment="Left" VerticalAlignment="Top">sou um botão que estou em cima e do lado esquerdo</Button>
        <Button Grid.Column="3" Grid.Row="5" HorizontalAlignment="Right" VerticalAlignment="Bottom">sou um botão que estou no em baixo e do lado direito</Button>
    </Grid>
</Window>

Experimentem a correr, e vejam os efeitos quando aumentam ou diminuem a window!

Ainda outro aspecto que tem que ter em atenção:

Quando criam um UserControl em WPF, não devem definir no próprio control qual a sua altura ou largura, e devem colocá-lo na window dentro do container que o vai conter e ele auto ajustar ao espaço. Porque ao definirem a altura e a largura, estão a impor que o controlo vai ter sempre aquelas medidas e dá asneira.

bom trabalho

tofas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora