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ć ?
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.
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>
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
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.
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
-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. ;)
@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;
}
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:
- Ustaw pozycje okna na 0,0.
- 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.
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...