简体   繁体   English

如何使用 Powershell 和自定义按钮最小化 WPF 窗口

[英]How to Minimize WPF window using Powershell and Custom Buttons

Hello I have developed a UI in WPF and I am using that UI into PowerShell, I want to change the Titlebar color for that I have implemented a Custome Templete and it's working but I don't know how to handle click event of Minimize maximiz and close button of windows,您好,我已经在 WPF 中开发了一个 UI,我正在将该 UI 用于 PowerShell,我想更改标题栏颜色,因为我已经实现了一个自定义模板并且它正在工作,但我不知道如何处理 Minimize maximiz 和关闭窗口按钮,

below is my code.下面是我的代码。

     [xml]$xaml = @"
<Window 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Style="{DynamicResource MetroWindowStyle}">
   <Window.Resources>
        <Style x:Key="MetroWindowStyle" TargetType="{x:Type Window}">
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
            <Setter Property="WindowStyle" Value="None" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Window}">
                        <Grid>
                            <Border x:Name="MainBorder" BorderThickness="0" Background="#FFEEE1E1" >
                                <DockPanel LastChildFill="True">
                                    <Border x:Name="PART_TITLEBAR" BorderThickness="1" BorderBrush="Black" Margin="0,0,0,0" Height="40" DockPanel.Dock="Top" Background="Transparent">
                                        <DockPanel LastChildFill="False">
                                            <TextBlock Margin="4,0,0,4" VerticalAlignment="Center" 
                                                       Foreground="Red" TextWrapping="NoWrap" 
                                                       Text="{TemplateBinding Title}" FontSize="16" />
                                            <Button Name="PART_CLOSE" DockPanel.Dock="Right" 
                                                    VerticalAlignment="Center" Margin="5"
                                                    Height="20" Width="20" 
                                                    Style="{DynamicResource MetroWindowButtonStyle}"
                                                    >

                                                <Path Data="F1M54.0573,47.8776L38.1771,31.9974 54.0547,16.1198C55.7604,14.4141 55.7604,11.6511 54.0573,9.94531 52.3516,8.23962 49.5859,8.23962 47.8802,9.94531L32.0026,25.8229 16.1224,9.94531C14.4167,8.23962 11.6511,8.23962 9.94794,9.94531 8.24219,11.6511 8.24219,14.4141 9.94794,16.1198L25.8255,32 9.94794,47.8776C8.24219,49.5834 8.24219,52.3477 9.94794,54.0534 11.6511,55.7572 14.4167,55.7585 16.1224,54.0534L32.0026,38.1745 47.8802,54.0534C49.5859,55.7585 52.3516,55.7572 54.0573,54.0534 55.7604,52.3477 55.763,49.5834 54.0573,47.8776z" 
                                                      Stretch="Uniform" Fill="#FFAAAAAA" Width="10" Margin="0,0,0,0" ></Path>
                                            </Button>
                                            <Button x:Name="PART_MAXIMIZE_RESTORE" 
                                                    DockPanel.Dock="Right" Margin="5"
                                                    HorizontalAlignment="Center" VerticalAlignment="Center" 
                                                    Height="20" Width="20" Style="{DynamicResource MetroWindowButtonStyle}">
                                                <Path Data="M4.3685131,23.127279L4.3685131,47.283243 47.117023,47.283243 47.117023,23.127279z M0,10.684L53.755001,10.684 53.755001,51.668001 0,51.668001z M8.5679998,0L58.668022,0 64,0 64,5.6864691 64,45.317999 58.668022,45.317999 58.668022,5.6864691 8.5679998,5.6864691z"
                                                      Stretch="Uniform" Fill="#FFAAAAAA" Width="10" Margin="0,0,0,0" ></Path>
                                            </Button>
                                            <Button x:Name="PART_MINIMIZE" 
                                                    HorizontalAlignment="Center" 
                                                    VerticalAlignment="Center" Margin="5"
                                                    DockPanel.Dock="Right"
                                                    Height="20" Width="20" Style="{DynamicResource MetroWindowButtonStyle}"
                                                    VerticalContentAlignment="Bottom">
                                                <Button.Content>
                                                    <Path Data="M0,20L53.333,20 53.333,8.888 0,8.888z" 
                                                          Stretch="Uniform" Fill="#FFAAAAAA" Width="10" Margin="0,0,0,5"></Path>
                                                </Button.Content>
                                            </Button>
                                        </DockPanel>
                                    </Border>

                                    <AdornerDecorator DockPanel.Dock="Bottom">
                                        <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}"/>
                                    </AdornerDecorator>
                                </DockPanel>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type Window}">
                                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">
                                    <Grid>
                                        <AdornerDecorator>
                                            <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}"/>
                                        </AdornerDecorator>
                                        <ResizeGrip x:Name="WindowResizeGrip" HorizontalAlignment="Right" IsTabStop="False" Visibility="Collapsed" VerticalAlignment="Bottom"/>
                                    </Grid>
                                </Border>
                                <ControlTemplate.Triggers>
                                    <MultiTrigger>
                                        <MultiTrigger.Conditions>
                                            <Condition Property="ResizeMode" Value="CanResizeWithGrip"/>
                                            <Condition Property="WindowState" Value="Normal"/>
                                        </MultiTrigger.Conditions>
                                        <Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible"/>
                                    </MultiTrigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
        <Style x:Key="MetroWindowButtonStyle" TargetType="{x:Type Button}">
            <Setter Property="FocusVisualStyle">
                <Setter.Value>
                    <Style>
                        <Setter Property="Control.Template">
                            <Setter.Value>
                                <ControlTemplate>
                                    <Rectangle Margin="2" SnapsToDevicePixels="True" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </Setter.Value>
            </Setter>
            <Setter Property="Background" Value="{x:Null}"/>
            <Setter Property="BorderBrush" Value="#FF707070"/>
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="Padding" Value="1"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsDefaulted" Value="True">
                                <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                            </Trigger>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter Property="Background" TargetName="border" Value="#FFBEE6FD"/>
                                <Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/>
                            </Trigger>
                            <Trigger Property="IsPressed" Value="True">
                                <Setter Property="Background" TargetName="border" Value="#FFC4E5F6"/>
                                <Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/>
                            </Trigger>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
                                <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
                                <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>   
     <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="35*"/>
            <RowDefinition Height="55*"/>
            <RowDefinition Height="57*"/>
            <RowDefinition Height="172*"/>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" Grid.Row="0">
            <TextBlock Text="Select" FontSize="15"></TextBlock>
            <ComboBox x:Name="FC" Margin="10,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Width="78" >

            </ComboBox>
            <TextBlock Text="" Name="SelectedValueText" VerticalAlignment="Top" Margin="10,0,0,0"></TextBlock>
        </StackPanel>
        <StackPanel Grid.Row="1">
            <TextBlock Text="This is Visible from A selection" Name="First" Visibility="Collapsed"></TextBlock>
        </StackPanel>

        <StackPanel Grid.Row="2">
            <TextBlock Text="This is Visible from B selection" Name="Second"  Visibility="Collapsed"></TextBlock>
        </StackPanel>

    </Grid>
</Window>

"@

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load( $reader )

$combobox=$Window.FindName('FC')
$combobox.Items.Add('A')
$combobox.Items.Add('B')
$SValue=$Window.FindName('SelectedValueText')
$First=$Window.FindName('First')
$Second=$Window.FindName('Second')




$combobox.Add_SelectionChanged({
$SValue.Text=$combobox.SelectedItem.ToString()

 if ($SValue.Text -eq 'A')
{
$First.Visibility='Visible'
$Second.Visibility='Hidden'
[System.Windows.Forms.MessageBox]::Show("you select A")

}
else
{
$First.Visibility='Hidden'
$Second.Visibility='Visible'
[System.Windows.Forms.MessageBox]::Show("you Select B")

}
})
$Window.ShowDialog()

below is op window下面是操作窗口

在此处输入图片说明

currently my Close, Maximize and Minimize button not workin can any one please help me how I can write that events in Powershell?目前我的关闭、最大化和最小化按钮不起作用,有人可以帮助我如何在 Powershell 中编写这些事件吗?

You need to use the $Window.WindowState property to say whether the form should be minimized, maximized or restored to normal.您需要使用$Window.WindowState属性来说明该窗体是应该最小化、最大化还是恢复正常。 The code below shows how it can be done.下面的代码显示了它是如何完成的。

#Minimize the Window
$MinimizeButton.Add_Click({
    $Window.WindowState = 'Minimized'
})
$MaxRestoreButton.Add_Click({
    If ($Window.WindowState -eq 'Normal') {
        #Maximize the window
        $Window.WindowState = 'Maximized'
    } Else {
        #Put window back to its normal size if maximized already
        $Window.WindowState = 'Normal'
    }
})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM