Jump to content

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


kombypetras

Recommended Posts

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.

Link to comment
Share on other 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.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Link to comment
Share on other 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

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Link to comment
Share on other sites

  • 4 weeks later...

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.