2012-12-18 12 views
5

Jeśli spojrzysz na przeglądarkę Chrome po zmaksymalizowaniu, ma ona nagłówki tabulacji u góry okna. Czy mogę zrobić coś podobnego?Czy w WPF mogę mieć okno bez obramowania, które ma regularne przyciski minimalizacji, maksymalizowania i zamykania?

+1

Co będziemy chcieli zrobić, to wyciągnąć rzeczy bezpośrednio na ramie okiennej (obszar non-Client). Jest to bardzo możliwe z WPF; jeśli się przeszukasz, możesz znaleźć coś, czego możesz użyć. – BoltClock

Odpowiedz

20

Oczywiście, ale sam musisz przerobić te przyciski (nie jest to trudne, nie martw się).

W swojej MainWindow.xaml:

<Window ... 
     Title="" Height="Auto" Width="Auto" Icon="../Resources/MyIcon.ico" 
     ResizeMode="NoResize" WindowStartupLocation="CenterScreen" 
     WindowStyle="None" AllowsTransparency="True" Background="Transparent" 
     ...> 
    <Canvas> 
     <Button /> <!-- Close --> 
     <Button /> <!-- Minimize --> 
     <Button /> <!-- Maximize --> 
     <TabControl> 
      ... 
     </TabControl> 
    </Canvas> 
</Window> 

Wtedy po prostu trzeba umieścić przycisków oraz TabControl jak chciał na płótnie i dostosować wygląd.

EDIT: Wbudowany w poleceniach do zamykania/maksymalizacji/minimalizacji w .NET 4.5 są SystemCommands.CloseWindowCommand/ SystemCommands.MaximizeWindowCommand/SystemCommands.MinimizeWindowCommand

Więc jeśli używasz .NET 4.5, można to zrobić:

<Window ... 
     Title="" Height="Auto" Width="Auto" Icon="../Resources/MyIcon.ico" 
     ResizeMode="NoResize" WindowStartupLocation="CenterScreen" 
     WindowStyle="None" AllowsTransparency="True" Background="Transparent" 
     ...> 
    <Window.CommandBindings> 
     <CommandBinding Command="{x:Static SystemCommands.CloseWindowCommand}" CanExecute="CommandBinding_CanExecute_1" Executed="CommandBinding_Executed_1" /> 
     <CommandBinding Command="{x:Static SystemCommands.MaximizeWindowCommand}" CanExecute="CommandBinding_CanExecute_1" Executed="CommandBinding_Executed_2" /> 
     <CommandBinding Command="{x:Static SystemCommands.MinimizeWindowCommand}" CanExecute="CommandBinding_CanExecute_1" Executed="CommandBinding_Executed_3" /> 
    </Window.CommandBindings> 
    <Canvas> 
     <Button Command="{x:Static SystemCommands.CloseWindowCommand}" Content="Close" /> 
     <Button Command="{x:Static SystemCommands.MaximizeWindowCommand}" Content="Maximize" /> 
     <Button Command="{x:Static SystemCommands.MinimizeWindowCommand}" Content="Minimize" /> 
     <TabControl> 
      ... 
     </TabControl> 
    </Canvas> 
</Window> 

A w C# kodu za:

private void CommandBinding_CanExecute_1(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; 
    } 

    private void CommandBinding_Executed_1(object sender, ExecutedRoutedEventArgs e) 
    { 
     SystemCommands.CloseWindow(this); 
    } 

    private void CommandBinding_Executed_2(object sender, ExecutedRoutedEventArgs e) 
    { 
     SystemCommands.MaximizeWindow(this); 
    } 

    private void CommandBinding_Executed_3(object sender, ExecutedRoutedEventArgs e) 
    { 
     SystemCommands.MinimizeWindow(this); 
    } 

To uczyni blisko/maksymalizacji/minimalizacji działa dokładnie tak jak w w zwykłym oknie.
Oczywiście, możesz użyć System.Windows.Interactivity, aby przenieść C# do ViewModel.

Powiązane problemy