代码之家  ›  专栏  ›  技术社区  ›  user5349170

PowerShell的WPF Datepicker事件处理程序

  •  0
  • user5349170  · 技术社区  · 7 年前

    我正在尝试向日期选择器添加事件处理程序 WPF control 在PowerShell中,当用户选择日期时触发事件。我试着跟踪,但没有成功。有人知道日期选择器在PowerShell中使用的正确事件处理程序是什么吗?

    $dpDate.Add_SelectedDateChanged({ do-something-here })
    

    代码段如下:

    <DatePicker x:Name="dpDate" HorizontalAlignment="Left" VerticalAlignment="Top" Width="105" Focusable="false"/>
    
    $dpDate.Add_SelectedDateChanged
        ({ 
            $DateFormat = get-date $dpDate.SelectedDate -f yyy-MM-dd
            $tb_FinalDate.text = $DateFormat
        })
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Manu    7 年前

    这是用于执行所请求操作的Powershell/WPF代码(经过测试和验证):

    Add-Type -AssemblyName PresentationFramework
    Add-Type -AssemblyName System.Windows.Forms
    [xml]$xaml=@"
    <Window
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:Test"
            Title="MainWindow" Height="265" Width="371">
        <Grid>
            <DatePicker x:Name="dpDate" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/>
            <TextBox x:Name="tb_FinalDate" HorizontalAlignment="Left" Height="23" Margin="10,55,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="149"/>
    
        </Grid>
    </Window>
    
    "@
    
    $reader=(New-Object System.Xml.XmlNodeReader $xaml)
    $Window=[Windows.Markup.XamlReader]::Load($reader)
    
    #Turn XAML into PowerShell objects
    $xaml.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'x:Name')]]") | ForEach-Object{
        Set-Variable -Name ($_.Name) -Value $Window.FindName($_.Name)
    }
    
    $dpDate.Add_SelectedDateChanged({
        $tb_FinalDate.Text = Get-Date($dpDate.Text) -Format 'yyyy-MM-dd'
    })
    
    #Display Form
    $Window.ShowDialog() | Out-Null
    

    使用时 SelectedDateChanged ,则每次选择日期时都会更新文本框的文本:

    $dpDate.Add_SelectedDateChanged({
        $tb_FinalDate.Text = Get-Date($dpDate.Text) -Format 'yyyy-MM-dd'
    })