2017-10-15 57 views
0

我正在寻找的最终效果是“消失”行“1”,又名:从顶部开始的第二行,以便Text1向下扩展到区域中如果第1行不存在。Powershell WPF XAML折叠RowDefinition高度或设置为零的事件

这是我试图完成的模型。前2行和列几乎完全相同。

如果我将此XAML插入到VS2017社区,并将行高设置为0,则可以使用。谷歌搜索了几天后,我还没有想出一个解决方案。

我根本不知道C#。

平台: 的Windows 7 //辣妹V5

不久将视窗10 //辣妹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 

谢谢你的期待。

回答

1

这是因为它不是$WPFGrid.RowDefinition而是$WPFGrid.RowDefinitions,最后是s

我删除Visibility的方法,因为它没有与RowDefinitions实现并由<RowDefinition Height="0" />改变<RowDefinition Height="40" />给行隐形启动窗口。

此代码工作

[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 
+1

谢谢马努!我“发誓”我试过这个。 (显然不是)。 – Steve

相关问题