【问题标题】:Powershell WPF StackPanel not updating correctlyPowershell WPF StackPanel 未正确更新
【发布时间】:2019-12-08 19:36:19
【问题描述】:

我正在使用 WPF XAML 表单和 Powershell [Windows.Markup.XamlReader] 为我的 Powershell UI 启动页面编写一个“空闲启动屏幕”。

启动外部脚本时,启动页面进入“空闲”模式,此时“空闲启动屏幕”进入。

正常工作时的“空闲启动屏幕”示例:

现在的问题是:首次启动外部 WPF UI(包括外部 WPF Powershell 脚本)时,“空闲启动屏幕”工作得非常好。然而,当关闭该外部 WPF UI 并重新打开另一个(仍在同一个 PSSession 中)时,“空闲启动屏幕”看起来很奇怪。好像它里面的 StackPanel 一直到前台,忽略任何 OpacityZIndex 设置(示例可以在下面的 imgur 链接中找到)。

我的 WPF 堆栈面板:

    <StackPanel x:Name="Launching" Visibility="Visible">
        <StackPanel.Background>
            <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                <GradientStop Color="LightBlue" Offset="0.077"/>
                <GradientStop Color="Transparent" Offset="2"/>
            </LinearGradientBrush>
        </StackPanel.Background>

        <StackPanel Margin="0,180,0,0" Height="200" Width="200" Background="Transparent">
            <wfi:WindowsFormsHost Margin="50,-30,0,0">
                <winForms:PictureBox x:Name="pictureBoxLoading">
                </winForms:PictureBox>
            </wfi:WindowsFormsHost>
            <Label Content="Applicatie lanceren..." Width="115" Margin="0,-29,0,0"/>
        </StackPanel>
    </StackPanel>

表单背后的Powershell代码:

## Loading the .gif
$pictureBoxLoading.Image = [System.Drawing.Image]::Fromfile("C:\Images\rocket.gif")

## Triggers
$Launching.Visibility = [System.Windows.Visibility]::Visible
$Launching.Visibility = [System.Windows.Visibility]::Hidden

我的问题的视频示例: https://imgur.com/a/UZyxH0A

【问题讨论】:

  • 如何触发叠加,蓝色叠加是如何实现的
  • @T-Me 我编辑了这篇文章。注意到并非所有代码都被正确复制粘贴。

标签: wpf powershell xaml user-interface


【解决方案1】:

问题是由WindowsFormsHost 引起的,因为它是一个WinForms 对象,并且本身不支持WPF。将其命名为 (&lt;wfi:WindowsFormsHost x:Name="Host"...) 并将其隐藏。然后在加载屏幕的其余部分之后使其可见:

function hide {
    $Launching.Visibility = [System.Windows.Visibility]::Hidden
    $Host.Visibility = [System.Windows.Visibility]::Hidden
}

function show {
    $Launching.Visibility = [System.Windows.Visibility]::Visible
    $Host.Visibility = [System.Windows.Visibility]::Visible    
}

【讨论】:

  • 天哪,谢谢!像一个魅力一样工作(除了已经使用了 PoSh 中的 $host,所以我将它命名为 $Host1)。
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2021-10-26
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多