Articles in this section
Category / Section

How to add minimize button for native floatwindow in WPF DockingManager?

5 mins read

This article describes how to add Minimize button in NativeFloatWindow of DockingManager.

Use NativeFloatWindow style to add the Minimize button in NativeFloatWindow. Added the Minimize button in header of NativeFloatWindow and command binding to minimize the NativeFloatWindow in ContentControl Template of WPF DockingManager.

The following code example demonstrates the same.

XAML

<Window.Resources>
  <Style x:Key="N_MinimizeButton" TargetType="{x:Type ToggleButton}">
     <Setter Property="Template" >
       <Setter.Value>
         <ControlTemplate TargetType="{x:Type ToggleButton}">
           <StackPanel>
             <Border x:Name="brdBack" Width="15" Height="15" BorderThickness="0" Background="Transparent" BorderBrush="Transparent" >
               <Grid HorizontalAlignment="Center" VerticalAlignment="Center" >
                 <Path Name="pathButton" Data="M0,0L32,0 32,5.3 0,5.3z" Fill="Black" Stretch="Uniform" StrokeThickness="1" Width="9" Height="8" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5">
                   <Path.RenderTransform>
                     <TransformGroup>
                       <TransformGroup.Children>
                          <RotateTransform Angle="0" />
                          <ScaleTransform ScaleX="1" ScaleY="1" />
                       </TransformGroup.Children>
                     </TransformGroup>
                   </Path.RenderTransform>
                 </Path>
               </Grid>
             </Border>
           </StackPanel>
           <ControlTemplate.Triggers>
             <MultiDataTrigger>
               <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.IsTouchEnabled),RelativeSource={RelativeSource AncestorType=Syncfusion:NativeFloatWindow}}" Value="True"/>
               </MultiDataTrigger.Conditions>
               <Setter TargetName="brdBack" Property="Width" Value="35"/>
               <Setter TargetName="brdBack" Property="Height" Value="35"/>
               <Setter TargetName="pathButton" Property="Width" Value="13"/>
               <Setter TargetName="pathButton" Property="Height" Value="13"/>
               <Setter TargetName="pathButton" Property="Data" Value="F1M377.597,302.937L363.046,302.937L363.046,292.232L377.597,292.232z M360.821,305.162L379.821,305.162L379.821,287.783L360.821,287.783z"/>
               <Setter TargetName="pathButton" Property="StrokeThickness" Value="0"/>
               <Setter TargetName="pathButton" Property="Fill" Value="{Binding Path=Foreground,RelativeSource={RelativeSource AncestorType={x:Type ToggleButton}}}"/>
             </MultiDataTrigger>
             <Trigger Property="IsMouseOver" Value="True">
               <Setter TargetName="brdBack" Property="Background" Value="{StaticResource Default.ButtonOver}"/>
               <Setter TargetName="brdBack" Property="BorderBrush" Value="{StaticResource Default.ButtonOverBorder}"/>
               <Setter TargetName="brdBack" Property="BorderThickness" Value="1"/>
               <Setter TargetName="pathButton" Property="Stroke" Value="{StaticResource Default.AwlKeyImg}" />
             </Trigger>
             <DataTrigger Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}"
Value="True" >
               <Setter TargetName="pathButton" Property="Stroke" Value="{StaticResource Aero.AwlKeyImgFocused}"/>
             </DataTrigger>
             <MultiDataTrigger>
               <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True"/>
                 <Condition Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}"
Value="True" />
               </MultiDataTrigger.Conditions>
               <Setter TargetName="brdBack" Property="Background" Value="{StaticResource Default.ButtonFocused}"/>
               <Setter TargetName="brdBack" Property="BorderBrush" Value="{StaticResource Default.ButtonFocusedBorder}"/>
               <Setter TargetName="brdBack" Property="BorderThickness" Value="1"/>
               <Setter TargetName="pathButton" Property="Stroke" Value="{StaticResource Aero.AwlKeyImgFocused}" />
             </MultiDataTrigger>
             <Trigger Property="IsEnabled" Value="False">
               <Setter TargetName="pathButton" Property="Stroke" Value="{StaticResource Default.FlatKeyBrushDisable}" />
             </Trigger>
             <MultiDataTrigger>
               <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}"
Value="True" />
                 <Condition Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}}" Value="False" />
               </MultiDataTrigger.Conditions>
               <Setter TargetName="pathButton" Property="Stroke" Value="{StaticResource Default.FlatKeyBrushFocused}" />
             </MultiDataTrigger>
           </ControlTemplate.Triggers>
         </ControlTemplate>
       </Setter.Value>
     </Setter>
  </Style>
  <Style x:Key="Header1" TargetType="{x:Type ContentControl}">
     <Setter Property="Template">
       <Setter.Value>
         <ControlTemplate TargetType="{x:Type ContentControl}">
           <Border Name="borderTop" BorderBrush="#FFDEDEDE" >
             <Border Name="borderWrap" BorderBrush="#FF595959" >
               <Border.ContextMenu>
                 <Syncfusion:CustomContextMenu Name="PART_ContextMenu" Focusable="false" />
               </Border.ContextMenu>
               <DockPanel Name="MiddleHdrImg" LastChildFill="True" Background="{StaticResource Aero.FloatHeaderMiddleBackgroundActive}">
                 <StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
                   <ToggleButton  x:Name="Restorebutton" Focusable="False" shell:WindowChrome.IsHitTestVisibleInChrome="True" Style="{StaticResource N_RestoreButton}" Margin="0,4,2,0" Padding="0" Command="Syncfusion:NativeFloatWindow.RestoreCommand"/>
                   <ToggleButton  x:Name="mini_button" Loaded="mini_button_Loaded" Focusable="False" shell:WindowChrome.IsHitTestVisibleInChrome="True" Style="{StaticResource N_MinimizeButton}" Margin="0,4,2,0" Padding="0" Command="local:MinimizeCommandLibrary.MinimizeCommand"/>
                   <ToggleButton x:Name="m_button" Focusable="False" shell:WindowChrome.IsHitTestVisibleInChrome="True" Style="{StaticResource N_MaximizeButton}" Margin="0,4,2,0" Padding="0" Command="Syncfusion:NativeFloatWindow.MaximizeCommand"/>
                   <ToggleButton Name="button" Focusable="False" shell:WindowChrome.IsHitTestVisibleInChrome="True" Margin="3,4,0,0" Padding="0" Command="Syncfusion:NativeFloatWindow.CloseCommand Template="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion: DockingManager.CloseButtonTemplate),RelativeSource={RelativeSource AncestorType=Syncfusion:NativeFloatWindow}}">
                     <ToggleButton.ToolTip>
                       <ToolTip Name="tooltip" >
                         <TextBlock Name="tooltipText" Text="{Binding Source={StaticResource ResourceWrapperKey}, Path=CloseButtonTooltipText}"/>
                       </ToolTip>
                     </ToggleButton.ToolTip>
                   </ToggleButton>
                 </StackPanel>
                 <Border Name="Icon" DockPanel.Dock="Left" Margin="6,3,2,3" Width="16"  Background="{Binding Path=(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockingManager.Icon), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}"/>
                 <ContentPresenter DockPanel.Dock="Left" Name="contentWraper" VerticalAlignment="Center"  HorizontalAlignment="Left" TextBlock.Foreground="{StaticResource Aero.FloatWindowHeaderForeground}" IsHitTestVisible="True" Content="{Binding Path=(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockedElementTabbedHost.HostedElement).(Syncfusion:DockingManager.Header, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}"/>
               </DockPanel>
             </Border>
           </Border>
           <ControlTemplate.Triggers>
             <Trigger Property="Background" SourceName="Icon" Value="{x:Null}">
               <Setter TargetName="Icon" Property="Visibility" Value="Collapsed"/>
             </Trigger>
             <DataTrigger Binding="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.IsTouchEnabled),RelativeSource={RelativeSource AncestorType=Syncfusion:NativeFloatWindow}}" Value="True">
               <Setter Property="FontSize" Value="18"/>
             </DataTrigger>
             <MultiDataTrigger>
               <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Path=(Syncfusion:NativeFloatWindow.MaximizeButtonEnabled),RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="True" />
                 <Condition Binding="{Binding Path=(Syncfusion:NativeFloatWindow.WindowState),RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="Maximized" />
               </MultiDataTrigger.Conditions>
               <Setter TargetName="m_button" Property="Visibility" Value="Collapsed"/>
               <Setter TargetName="Restorebutton" Property="Visibility" Value="Visible" />
             </MultiDataTrigger>
             <MultiDataTrigger>
               <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Path=(Syncfusion:NativeFloatWindow.MaximizeButtonEnabled),RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="True"/>
                 <Condition Binding="{Binding Path=(Syncfusion:NativeFloatWindow.WindowState),RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="Normal" />
               </MultiDataTrigger.Conditions>
               <Setter TargetName="m_button" Property="Visibility" Value="Visible"/>
               <Setter TargetName="Restorebutton" Property="Visibility" Value="Collapsed" />
             </MultiDataTrigger>
             <DataTrigger Binding="{Binding Path=(Syncfusion:NativeFloatWindow.MaximizeButtonEnabled),RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="False">
               <Setter TargetName="m_button" Property="Visibility" Value="Collapsed"/>
               <Setter TargetName="Restorebutton" Property="Visibility" Value="Collapsed" />
             </DataTrigger>
             <DataTrigger Binding="{Binding Path=(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockedElementTabbedHost.HostedElement).(Syncfusion:DockingManager.CanDocument), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="False" >
               <Setter TargetName="PART_ContextMenu" Property="IsEnabledTabbedMenuItem" Value="False" />
             </DataTrigger>
             <MultiDataTrigger>
               <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Path=(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockedElementTabbedHost.HostedElement).(Syncfusion:DockingManager.CanClose), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="False" />
                 <Condition Binding="{Binding Path=(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockedElementTabbedHost.ShowTabs), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" 
Value="False"/>
               </MultiDataTrigger.Conditions>
               <Setter TargetName="PART_ContextMenu" Property="IsEnabledHiddenMenuItem" Value="False" />
               <Setter TargetName="button" Property="IsEnabled" Value="False" />
             </MultiDataTrigger>
             <MultiDataTrigger>
               <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.CloseTabs),RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="CloseActive"/>
                 <Condition  Binding="{Binding Path=(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockingManager.CanClose)
, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="False" />
                 <Condition Binding="{Binding Path=(Syncfusion:DockingManager.InternalDataContext).(Syncfusion:DockedElementTabbedHost.ShowTabs), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="True" />
               </MultiDataTrigger.Conditions>
               <Setter TargetName="PART_ContextMenu" Property="IsEnabledHiddenMenuItem" Value="False" />
               <Setter TargetName="button" Property="IsEnabled" Value="False" />
             </MultiDataTrigger>
             <DataTrigger Binding="{Binding Path=(PrimaryElement).(Syncfusion:DockingManager.NoHeader), RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="True" >
               <Setter TargetName="PART_ContextMenu" Property="Visibility" Value="Visible" />
             </DataTrigger>
             <DataTrigger Binding="{Binding Path=IsMultiHostsContainer, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" 
Value="True" >
               <Setter TargetName="contentWraper" Property="Visibility" Value="Hidden" />
             </DataTrigger>
             <DataTrigger Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}"
Value="False" >
               <Setter TargetName="MiddleHdrImg" Property="Background" Value="{StaticResource Aero.FloatHeaderMiddleBackgroundInactive}" />
             </DataTrigger>
             <Trigger SourceName="MiddleHdrImg" Property="Visibility" Value="Visible">
               <Setter TargetName="MiddleHdrImg" Property="Background" Value="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.FloatWindowHeaderBackground), RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" />
               <Setter TargetName="contentWraper" Property="TextBlock.Foreground" Value="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.FloatWindowHeaderForeground), RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" />
             </Trigger>
             <DataTrigger Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}"
Value="True">
               <Setter TargetName="MiddleHdrImg" Property="Background" Value="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.FloatWindowSelectedHeaderBackground), RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" />
               <Setter TargetName="contentWraper" Property="TextBlock.Foreground" Value="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.FloatWindowSelectedHeaderForeground), RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" />
             </DataTrigger>
             <DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="True" >
               <Setter TargetName="MiddleHdrImg" Property="Background" Value="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.FloatWindowMouseOverHeaderBackground), RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" />
               <Setter TargetName="contentWraper" Property="TextBlock.Foreground" Value="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.FloatWindowMouseOverHeaderForeground), RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" />
             </DataTrigger>
             <MultiDataTrigger>
               <MultiDataTrigger.Conditions>
                 <Condition Binding="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.IsEnableHotTracking),RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="True" />
                 <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" Value="True" />
                 <Condition Binding="{Binding  Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" 
Value="False" />
               </MultiDataTrigger.Conditions>
               <Setter TargetName="MiddleHdrImg" Property="Background" Value="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.FloatWindowMouseOverHeaderBackground), RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" />
               <Setter TargetName="contentWraper" Property="TextBlock.Foreground" Value="{Binding Path=(Syncfusion:NativeFloatWindow.DockingManager).(Syncfusion:DockingManager.FloatWindowMouseOverHeaderForeground), RelativeSource={RelativeSource AncestorType={x:Type Syncfusion:NativeFloatWindow}}}" />
             </MultiDataTrigger>
           </ControlTemplate.Triggers>
         </ControlTemplate>
       </Setter.Value>
     </Setter>
  </Style>
  <Style x:Key="style" TargetType="{x:Type Syncfusion:NativeFloatWindow}" BasedOn="{StaticResource AeroNativeWindowStyle}">
     <Setter Property="WindowStyle" Value="None"/>
     <Setter Property="shell:WindowChrome.WindowChrome">
       <Setter.Value>
         <shell:WindowChrome ResizeBorderThickness="7" CornerRadius="0"  CaptionHeight="20" GlassFrameThickness="0">
         </shell:WindowChrome>
       </Setter.Value>
     </Setter>
     <Setter Property="Template">
       <Setter.Value>
         <ControlTemplate TargetType="{x:Type ContentControl}">
           <AdornerDecorator>
             <DockPanel Focusable="False" LastChildFill="True" >
               <Border Name="FloatWindowOutBorder" Focusable="False" 
BorderBrush="{StaticResource Aero.FloatHeaderBorderBrush}"
BorderThickness="{StaticResource SingleThickness}"
Background="{StaticResource Default.WindowBackground}" >
                 <Border.Style>
                   <Style TargetType="{x:Type Border}">
                     <Setter Property="BorderThickness" Value="0"/>
                     <Style.Triggers>
                       <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=WindowState}" Value="Maximized">
                         <Setter Property="Margin" Value="8,5,2,0"/>
                       </DataTrigger>
                     </Style.Triggers>
                   </Style>
                 </Border.Style>
                 <Grid Focusable="False">
                   <Grid.RowDefinitions>
                     <RowDefinition Name="TopRow" Style="{StaticResource RowDefinitionStyle}" />
                     <RowDefinition Height="*" />
                     <RowDefinition Name="BottomRow" Height="4" />
                   </Grid.RowDefinitions>
                   <Grid.ColumnDefinitions>
                     <ColumnDefinition Name="LeftCol" Width="4" />
                     <ColumnDefinition Width="*" />
                     <ColumnDefinition Name="RightCol" Width="4" />
                   </Grid.ColumnDefinitions>
                   <ContentControl Focusable="False" Style="{StaticResource LeftTop}" Name="BorderLeftTop" Grid.Column="0" Grid.Row="0" />
                   <Border x:Name="Part_BorderMenu" Grid.Column="1" Grid.Row="0" >
                     <Border.ContextMenu>
                       <Syncfusion:CustomContextMenu  x:Name="Part_CustomContextMenu" Focusable="false" ItemContainerStyle="{StaticResource VistaCustomMenuItemStyle}"/>
                     </Border.ContextMenu>
                   </Border>
                   <ContentControl Focusable="False" Style="{StaticResource Header1}" Name="BorderHeader" Grid.Column="1" Grid.Row="0" Content="{Binding Path=Title,RelativeSource={RelativeSource TemplatedParent}}"/>
                   <ContentControl Focusable="False" Style="{StaticResource RightTop}" Name="BorderRightTop" Grid.Column="2" Grid.Row="0" />
                   <ContentControl Focusable="False" Style="{StaticResource Left}" Name="BorderLeft" Grid.Column="0" Grid.Row="1" />
                   <ContentPresenter Name="ContentPresenter"  Grid.Column="1" Grid.Row="1" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" Content="{TemplateBinding ContentControl.Content}" />
                   <ContentControl Focusable="False" Style="{StaticResource Right}" Name="BorderRight" Grid.Column="2" Grid.Row="1" />
                   <ContentControl Focusable="False" Style="{StaticResource LeftBottom}" Name="BorderLeftBottom" Grid.Column="0" Grid.Row="2" />
                   <ContentControl Focusable="False" Style="{StaticResource Bottom}" Name="BorderBottom" Grid.Column="1" Grid.Row="2" />
                   <ContentControl Focusable="False" Style="{StaticResource RightBottom}" Name="BorderRightBottom" Grid.Column="2" Grid.Row="2" />
                 </Grid>
               </Border>
             </DockPanel>
           </AdornerDecorator>
         </ControlTemplate>
       </Setter.Value>
     </Setter>
  </Style>
</Window.Resources>
<Grid>
   <Syncfusion:DockingManager DockFill="True" UseNativeFloatWindow="True" NativeFloatWindowStyleMode="SingleBorderWindow" NativeWindowStyle="{StaticResource style}" ShowFloatWindowInTaskbar="True">
     <ContentControl Syncfusion:DockingManager.Header="Item1" x:Name="Content1" Syncfusion:DockingManager.CanFloatMaximize="True"/>
     <ContentControl Syncfusion:DockingManager.Header="Item2" Syncfusion:DockingManager.CanFloatMaximize="True"/>
     <ContentControl Syncfusion:DockingManager.Header="Item3" Syncfusion:DockingManager.CanFloatMaximize="True"/>
     <ContentControl Syncfusion:DockingManager.Header="Item4" Syncfusion:DockingManager.CanFloatMaximize="True"/>
     <ContentControl Syncfusion:DockingManager.Header="Item5" Syncfusion:DockingManager.CanFloatMaximize="True"/>
   </Syncfusion:DockingManager> 
</Grid>

 

C#

public partial class MainWindow : Window
{
  public MainWindow()
  {
     InitializeComponent();
  }
 
  private void mini_button_Loaded(object sender, RoutedEventArgs e)
  {
     NativeFloatWindow window = Window.GetWindow(sender as DependencyObject) as NativeFloatWindow;
     CommandBinding bindingMin = new CommandBinding((sender as System.Windows.Controls.Primitives.ToggleButton).Command, ExecuteMin);
     window.CommandBindings.Add(bindingMin);
  }
 
  private void ExecuteMin(object sender, ExecutedRoutedEventArgs e)
  {
     NativeFloatWindow window = Window.GetWindow(sender as DependencyObject) as NativeFloatWindow;
     if (window != null)
     {
       if (window.WindowState != WindowState.Minimized)
       {
          Rect floatrect = DockingManager.GetFloatingWindowRect(window.PrimaryElement);
          window.WindowState = WindowState.Minimized;
          window.StateChanged += Window_StateChanged;
          DockingManager.SetPreviousFloatingWindowRect( window.PrimaryElement, floatrect);
       }
     }
  }
 
  private void Window_StateChanged(object sender, EventArgs e)
  {
     NativeFloatWindow window = sender as NativeFloatWindow;
     Rect floatrect = DockingManager.GetPreviousFloatingWindowRect(window.PrimaryElement);
     if ((sender as NativeFloatWindow).WindowState == WindowState.Maximized)
       DockingManager.SetFloatingWindowRect(window.PrimaryElement, floatrect);
  }
}
 
public static class MinimizeCommandLibrary
{
     public static RoutedUICommand MinimizeCommand = new RoutedUICommand("Minimize", "Minimize", typeof(MinimizeCommandLibrary));
}

 

 

Adding minimize button in float window of WPF DockingManager

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied