Dopasowywanie okna i kontrolek do ekranu

0

Witam,tworzę aplikację w WPF i chciałbym aby Główne Okno obejmowało cały ekran pozostawiając pasek zadań i aby kontrolki w środku również dopasowywały się do jego rozmiaru jednak nie wiem jak to za bardzo zrobić,może mi ktoś podpowiedzieć ?

2

jeśli powsadzasz kontrolki w gridy itp, bez stałych wysokości i szerokości to będą zawsze dopasowane do rozmiaru grida, czy tam panelu, zalezy czego uzyjesz.

0

Bardzo prosty przykład. .

   <Grid>
      <Grid.RowDefinitions>
         <RowDefinition Height="*" />
         <RowDefinition Height="*" />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="*" />
         <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>
      <Button Content="1/4" Background="Blue" Grid.Column="0" Grid.Row="0" />
      <Button Content="1/4" Background="Red" Grid.Column="1" Grid.Row="0" />
      <Button Content="1/2" Background="Yellow" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" />
   </Grid>
0

Póki co w oknie nic nie ma ale mam zamiar dodać tam masę rzeczy ponieważ będzie to Edytor Tekstu z szeregiem funkcji,czyli będzie masa przycisków,tab kontrolek itp

0

Więc skoro tam paska w ogóle nie ma, to jak możesz twierdzić że pasek znika po maksymalizacji?

<Window x:Class="wpfanimationtest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options" 
        Title="MainWindow" Height="488.256" Width="597.242" WindowState="Maximized">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="19*"/>
            <RowDefinition Height="439*"/>
        </Grid.RowDefinitions>
        <Menu HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
            <MenuItem Header="Menu1">
                <MenuItem/>
                <MenuItem Header="asd">
                    <MenuItem/>
                </MenuItem>
            </MenuItem>
            <MenuItem Header="Menu2"/>
        </Menu>
    </Grid>
</Window>

I nic nie znika.

0

Ten link co podałeś http://blogs.msdn.com/b/llobo/[...]2900_-considering-taskbar.aspx sprawdziłem go i jest troche złożony a i nie działa mi za bardzo,poza tym wydaje mi się,że musi istnieć jakieś prostsze rozwiązanie tego problemu,szukałem w internecie rozwiązania tego problemu i niektórzy proponowali po załadowaniu formy zrobić coś w stylu:

 MainWindow mw = new MainWindow();
mw.Height = mw.Height - 23;

ale to mi też nie działało :P

0

-23 bez sensu. Bo można ustawić pasek zadań z dużymi, małymi przyciskami lub można dać auto ukrywanie. Więc twoje rozwiązanie powinno być uniwersalne a nie wpisane na sztywno.

Możesz obliczyć wysokość paska zadań w ten sposób:

var taskbarHeight = Screen.PrimaryScreen.Bounds.Bottom - Screen.PrimaryScreen.WorkingArea.Bottom;

Ale można jeszcze prościej.. przypisując jedną z tych zmiennych jako wysokość okna. ;)

0

@DibbyDum
Próbowałem też tego co znalazłem na stackoverflow,ale też nie działa:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var desktopWorkingArea = System.Windows.SystemParameters.WorkArea;
this.Left = desktopWorkingArea.Right - this.Width;
this.Top = desktopWorkingArea.Bottom - this.Height;
}

1

No widzisz to może zacznij od nowa bo kopiujesz bez sensu i nic z tego nie wynika.
Jak robisz wszystko samemu od nowa w tym oknie to wyłącz maksymalizacje okna na starcie i zrób ją po swojemu czyli:

  1. Ustaw pozycje okna na 0,0.
  2. Wyciągnij wysokość i szerokość z Screen.PrimaryScreen.WorkingArea tam naprawdę nic nie trzeba odejmować.

Miej na uwadze że Screen.PrimaryScreen.WorkingArea może działać nie poprawnie na kompie z dwoma monitorami, ponieważ wyciągasz właściwości tylko głównego ekranu a nie tego na którym jest twoje okno.

0

Rozwiązanie jest, ale jak się zastanowić - to po co kombinować, skoro od tego jest właśnie maksymalizacja?

może działać nie poprawnie na kompie z dwoma monitorami, ponieważ wyciągasz właściwości tylko głównego ekranu a nie tego na którym jest twoje okno.
Dlatego nie Primary, tylko trzeba znaleźć na którym monitorze jest okno...

1

@Azarien 1. Dlatego że we właściwościach okna ustawił ''Window.WindowStyle'="None"' i podczas maksymalizacji okno zajmuje cały ekran nie zważając na pasek zadań.
2. Takie rozwiązanie zostało podane przez @dam1an ale dla autora wątku jest ono "trochę złożone". ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1