2011-03-09 11 views
6

Hemos creado algunas secuencias de comandos de PowerShell geniales. Pero a medida que pasa el tiempo, hemos dado los guiones a los no programadores. Así que decidimos que era hora de una GUI simple y fácil de entender para PowerShell.Uso de WPK para la interfaz gráfica de usuario de PowerShell

He visto los videos del canal 9 de James Brundage. Sus videos hacen un excelente trabajo al explicar Ventana, Panel de apilamiento, Panel de documentos, Cuadrícula, Etiquetas y Cuadros de texto. Sin embargo, hay más de 60 controles en total. No saber WPF no ayuda.

Lo que me gustaría hacer es ser capaz de hacer lo siguiente:

entrada de texto
lista desplegable
RadioButton Grupo Grupo
Casilla

me ocurrió con un ejemplo que hace el primeros tres pero con errores.
El control de radio muestra visualmente el primer botón seleccionado, pero cuando selecciono el valor para el grupo, no es correcto.

No puedo encontrar un ejemplo para la casilla de verificación.

Cualquier consejo sería apreciado.

Aquí es mi prueba de PTC en PowerShell:

function TestGui { 
    Import-Module WPK 

    $SelectedRadio = "First" 

    New-Window -Title "Test User Input" -WindowStartupLocation CenterScreen ` 
     -Width 400 -Height 300 -Show { 

     New-Grid -Rows 32*, 32*, 32*, 32* -Columns 100, 1* { 

     #create style to use on controls 
     $createLblStyle = @{ 
      Margin = 5 
      HorizontalAlignment = "right" 
      VerticalAlignment = "center" 
     } 

     #Label Text for this row 
     New-TextBlock -Text "Pick fruit" ` 
      -Row 0 -Column 0 @createLblStyle 

     # dropdown (combo box) 
     New-ComboBox -Name FruitList ` 
      -row 0 -column 1 @createLblStyle ` 
      -Items { "Apple", "Pear", "Peach" } -SelectedIndex 0 

     #Label Text for this row 
     New-TextBlock -Text "Pick number" ` 
      -Row 1 -Column 0 @createLblStyle 

     # TextBox 
     New-TextBox -Name TextInputName ` 
      -Row 1 -Column 1 @createLblStyle 

     #Label Text for this row 
     New-TextBlock -Text "Get Text Input" ` 
      -Row 2 -Column 0 @createLblStyle   

     #Do three radio buttons for this row. 
     New-StackPanel -Row 2 -Column 1 -Orientation Horizontal { 
      New-RadioButton -Content "Pick first" ` 
       -GroupName Results -IsChecked $True -On_Click { 
        $SelectedRadio = "First" 
       } 

      New-RadioButton -Content "Pick two" ` 
       -GroupName Results -On_Click { 
        $SelectedRadio = "Second" 
       } 

      New-RadioButton -Content "Pick three" ` 
       -GroupName Results -On_Click { 
        $SelectedRadio = "Third" 
       } 
     } 


     New-Button -Content "_Call PS Script" -Row 3 -Column 0 -Margin 3 -On_Click { 
      $FruitList   = $window | Get-ChildControl FruitList 
      $TextInputName  = $Window | Get-ChildControl TextInputName 
      $Results   = $Window | Get-ChildControl Results 

      $Window.Close() 
      write-host "call PS script with: " 
      write-host "DropDown => " $FruitList.SelectedValue 
      write-host "TextBox => " $TextInputName.Text 
      write-host "Radio => " $SelectedRadio 
    } 

     New-Button -Content "Cancel" -Row 3 -Column 1 -Margin 3 -On_Click { 
      $Window.Close() 
      write-host "Cancel was pressed" 
     } 
     } 
    } 
} 
+0

¿Cuál es el problema con el botón de opción? No puedo ver ninguno. –

+0

bernd, es cuando trato de recuperar el botón seleccionado, no me da el que he seleccionado. – Razcer

+0

Probé todos los casos e inicial botón de radio de estado, medio, derecha, izquierda y 'Llamar a PS Script' da: Radio => Primero, Radio => Primero, Radio => Tercero, Radio => Primero. ¿Obtuviste siempre el mismo valor o obtuviste valores diferentes pero incorrectos? –

Respuesta

0

Por lo que yo entiendo, que quiere crear una interfaz gráfica de usuario en la parte superior de un script de PowerShell que escribió.

Mi opinión es que tienes dos soluciones técnicas.

  1. a construir una interfaz gráfica de usuario en la parte superior del formulario Windows, que es la antigua manera de construir la interfaz gráfica de usuario en el marco de .NET
  2. Se construye una interfaz gráfica de usuario en la parte superior de WPF, la cual es una nueva forma de construir GUI de .NET Framework

en la primera solución puede crear directamente el formulario con visual Studio y "transform", o crear con una herramienta Sapien compañía llamada "PrimalForms Community Edition" la cual es una GUI builder gratis herramienta para usuarios de PowerShell. Usted construye su GUI (como un desarrollador de .NET) y la herramienta genera el código de Window Form en la sintaxis de PowerShell. Simplemente debe llamar a la función de secuencia de comandos en el lugar correcto (la que se genera para cada bloque de secuencia de comandos de eventos). Esta solución está bien para las formas normales.

La solución WPF es un poco más reciente y especialmente dedicada para el caso en el que desea agregar gráficos 2D o 3D en sus formularios o la adaptación a diferentes tamaños de pantalla. En esta solución, debe compilar una representación XAML de su formulario (con Visual Studio 2010 Expess, por ejemplo) y luego cargarlo en PowerShell. Esta solución necesita PowerShell 2.0 y Framework 3.5 instalados más distintivos especiales (-STA) para iniciar PowerShell. Para mí, el módulo WPK se basa en esta solución.

También existe una forma de crear gráficos en PowerShell.

Si está interesado en una u otra solución, hágamelo saber.

Espero que ayude.

JP

+0

JP, Estoy intentando específicamente hacer esto usando el PowerShellPack (WPK) y no creando un formulario de Windows. ex: ejecuta un script que abre una pequeña ventana para algunas entradas simples. Con un botón que llama más script para usar la entrada proporcionada. Puedo hacer que funcione con New-TextBox/New-ComboBox (agregando elementos manualmente) pero aún estoy tratando de encontrar ejemplos de sintaxis para New-RadioButton (List)/New-CheckBox (List) y posiblemente un ListBox en lugar de ComboBox. – Razcer

0

Cambiar para $Script:SelectedRadio en On_Click scriptblocks de botones de radio.

0

Para averiguar cuál de sus tres botones de opción está marcada, se puede utilizar la siguiente expresión:

if (($Window | Get-ChildControl 'One').IsChecked) { 
    $SelectedRadioButton = '1' 
} elseif (($Window | Get-ChildControl 'Two').IsChecked) { 
    $SelectedRadioButton = '2' 
} elseif (($Window | Get-ChildControl 'Three').IsChecked) { 
    $SelectedRadioButton = '3' 
} 

Si usted tiene sólo un grupo de botones de radio, no hay necesidad de asignar un nombre de grupo . Tampoco es necesario un evento On_Click. Se podría acortar sus expresiones Nueva RadioButton a:

New-RadioButton -Name 'One' -Content "Pick first" -IsChecked $true 
New-RadioButton -Name 'Two' -Content "Pick two" 
New-RadioButton -Name 'Three' -Content "Pick three" 

Para averiguar, si una casilla de verificación:

New-CheckBox -Name 'Uno' -Content "Uno" 

se haya comprobado, también sería inferir su propiedad IsChecked:

Write-Host "Checkbox UNo => " ($Window | Get-ChildControl UNo).IsChecked 
Cuestiones relacionadas