Powershell WPF XAML 通过事件折叠 RowDefinition 高度或设置为零
Powershell WPF XAML Collapse RowDefinition Height or set to Zero with event
我正在寻找的最终效果是 "disappear" 行“1”,又名:从顶部开始的第二行,以便 Text1 向下扩展到该区域,就好像第 1 行不存在一样。
这是我想要完成的模型。前 2 行和前 2 列几乎完全相同。
如果我将此 XAML 插入 VS2017 Community 并将行高设置为 0,这将起作用。在谷歌上搜索了几天后,我还没有想出解决方案。
我完全不懂 C#。
平台:
Windows 7 // 豪华 v5
即将成为 Windows 10 // Posh v5
理想情况下,我想先关闭它,然后再打开它。
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = @'
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TabularGrid" Height="300" Width="300">
<Grid Name="Grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="40" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<TextBox Name="Text1" Background="Silver" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" >Text1</TextBox>
<TextBox Name="Text2" Grid.Row="1" Grid.Column="0" >Text2</TextBox>
<Button Name="Enter" Grid.Row="1" Grid.Column="1" >Enter</Button>
<Button Name="Open" Grid.Row="2" Grid.ColumnSpan="2" >Open</Button>
<Button Name="Close" Grid.Row="3" Grid.ColumnSpan="2" >Close</Button>
</Grid>
</Window>
'@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Form=[Windows.Markup.XamlReader]::Load( $reader )
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "WPF$($_.Name)" -Value $Form.FindName($_.Name)}
#===========================================================================
# Store Form Objects In PowerShell
#===========================================================================
Function Get-FormVariables{
if ($global:ReadmeDisplay -ne $true){Write-host "If you need to reference this display again, run Get-FormVariables" -ForegroundColor Yellow;$global:ReadmeDisplay=$true}
write-host "Found the following interactable elements from our form" -ForegroundColor Cyan
get-variable WPF*
}
Get-FormVariables
#===========================================================================
# Shows the form
#===========================================================================
$WPFOpen.Add_Click({
$WPFGrid.RowDefinition[1].Visibility = $true
# or
$WPFGrid.RowDefinition[1].Height="40"
})
$WPFClose.Add_Click({
$WPFGrid.RowDefinition[1].Visibility = $false
# or
$WPFGrid.RowDefinition[1].Height="0"
})
#>
$Form.ShowDialog() | out-null
感谢观看
那是因为它不是 $WPFGrid.RowDefinition
,而是 $WPFGrid.RowDefinitions
,最后是 s
。
我删除了 Visibility
方法,因为它没有用 RowDefinitions
实现,并通过 <RowDefinition Height="0" />
更改了 <RowDefinition Height="40" />
以开始 window 行不可见。
此代码有效
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = @'
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TabularGrid" Height="300" Width="300">
<Grid Name="Grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="0" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<TextBox Name="Text1" Background="Silver" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" >Text1</TextBox>
<TextBox Name="Text2" Grid.Row="1" Grid.Column="0" >Text2</TextBox>
<Button Name="Enter" Grid.Row="1" Grid.Column="1" >Enter</Button>
<Button Name="Open" Grid.Row="2" Grid.ColumnSpan="2" >Open</Button>
<Button Name="Close" Grid.Row="3" Grid.ColumnSpan="2" >Close</Button>
</Grid>
</Window>
'@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Form=[Windows.Markup.XamlReader]::Load( $reader )
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "WPF$($_.Name)" -Value $Form.FindName($_.Name)}
#===========================================================================
# Store Form Objects In PowerShell
#===========================================================================
Function Get-FormVariables{
if ($global:ReadmeDisplay -ne $true){Write-host "If you need to reference this display again, run Get-FormVariables" -ForegroundColor Yellow;$global:ReadmeDisplay=$true}
write-host "Found the following interactable elements from our form" -ForegroundColor Cyan
get-variable WPF*
}
Get-FormVariables
#===========================================================================
# Shows the form
#===========================================================================
$WPFOpen.Add_Click({
$WPFGrid.RowDefinitions[1].Height= 40
})
$WPFClose.Add_Click({
$WPFGrid.RowDefinitions[1].Height= 0
})
$Form.ShowDialog() | out-null
我正在寻找的最终效果是 "disappear" 行“1”,又名:从顶部开始的第二行,以便 Text1 向下扩展到该区域,就好像第 1 行不存在一样。
这是我想要完成的模型。前 2 行和前 2 列几乎完全相同。
如果我将此 XAML 插入 VS2017 Community 并将行高设置为 0,这将起作用。在谷歌上搜索了几天后,我还没有想出解决方案。
我完全不懂 C#。
平台: Windows 7 // 豪华 v5
即将成为 Windows 10 // Posh v5
理想情况下,我想先关闭它,然后再打开它。
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = @'
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TabularGrid" Height="300" Width="300">
<Grid Name="Grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="40" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<TextBox Name="Text1" Background="Silver" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" >Text1</TextBox>
<TextBox Name="Text2" Grid.Row="1" Grid.Column="0" >Text2</TextBox>
<Button Name="Enter" Grid.Row="1" Grid.Column="1" >Enter</Button>
<Button Name="Open" Grid.Row="2" Grid.ColumnSpan="2" >Open</Button>
<Button Name="Close" Grid.Row="3" Grid.ColumnSpan="2" >Close</Button>
</Grid>
</Window>
'@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Form=[Windows.Markup.XamlReader]::Load( $reader )
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "WPF$($_.Name)" -Value $Form.FindName($_.Name)}
#===========================================================================
# Store Form Objects In PowerShell
#===========================================================================
Function Get-FormVariables{
if ($global:ReadmeDisplay -ne $true){Write-host "If you need to reference this display again, run Get-FormVariables" -ForegroundColor Yellow;$global:ReadmeDisplay=$true}
write-host "Found the following interactable elements from our form" -ForegroundColor Cyan
get-variable WPF*
}
Get-FormVariables
#===========================================================================
# Shows the form
#===========================================================================
$WPFOpen.Add_Click({
$WPFGrid.RowDefinition[1].Visibility = $true
# or
$WPFGrid.RowDefinition[1].Height="40"
})
$WPFClose.Add_Click({
$WPFGrid.RowDefinition[1].Visibility = $false
# or
$WPFGrid.RowDefinition[1].Height="0"
})
#>
$Form.ShowDialog() | out-null
感谢观看
那是因为它不是 $WPFGrid.RowDefinition
,而是 $WPFGrid.RowDefinitions
,最后是 s
。
我删除了 Visibility
方法,因为它没有用 RowDefinitions
实现,并通过 <RowDefinition Height="0" />
更改了 <RowDefinition Height="40" />
以开始 window 行不可见。
此代码有效
[void][System.Reflection.Assembly]::LoadWithPartialName('presentationframework')
[xml]$XAML = @'
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TabularGrid" Height="300" Width="300">
<Grid Name="Grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="0" />
<RowDefinition Height="30" />
<RowDefinition Height="30" />
</Grid.RowDefinitions>
<TextBox Name="Text1" Background="Silver" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" >Text1</TextBox>
<TextBox Name="Text2" Grid.Row="1" Grid.Column="0" >Text2</TextBox>
<Button Name="Enter" Grid.Row="1" Grid.Column="1" >Enter</Button>
<Button Name="Open" Grid.Row="2" Grid.ColumnSpan="2" >Open</Button>
<Button Name="Close" Grid.Row="3" Grid.ColumnSpan="2" >Close</Button>
</Grid>
</Window>
'@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Form=[Windows.Markup.XamlReader]::Load( $reader )
$xaml.SelectNodes("//*[@Name]") | %{Set-Variable -Name "WPF$($_.Name)" -Value $Form.FindName($_.Name)}
#===========================================================================
# Store Form Objects In PowerShell
#===========================================================================
Function Get-FormVariables{
if ($global:ReadmeDisplay -ne $true){Write-host "If you need to reference this display again, run Get-FormVariables" -ForegroundColor Yellow;$global:ReadmeDisplay=$true}
write-host "Found the following interactable elements from our form" -ForegroundColor Cyan
get-variable WPF*
}
Get-FormVariables
#===========================================================================
# Shows the form
#===========================================================================
$WPFOpen.Add_Click({
$WPFGrid.RowDefinitions[1].Height= 40
})
$WPFClose.Add_Click({
$WPFGrid.RowDefinitions[1].Height= 0
})
$Form.ShowDialog() | out-null