簡體   English   中英

使用按鈕打開WPF彈出窗口

[英]Open a WPF Popup with a button

我正在嘗試使用按鈕打開彈出窗口,並實現了基本的ICommand。 該按鈕綁定到ICommand OpenPopupCommand,而Popup IsOpen屬性綁定到“ IsOpen” OnPropertyChanged。 我的想法是將Popup.IsOpen屬性也綁定到ICommand,以使IT觸發OnPropertyChange,但無法使其正常工作。 我想我已經接近了,但無法弄清楚。 這是我到目前為止的代碼:

    #region ICommand Members

    private ICommand _openPopupCommand;
    public ICommand OpenPopupCommand
    {
        get
        {
            if (_openPopupCommand == null)
                _openPopupCommand = new RelayCommand(param => OpenPopupExecute(param));
            return _openPopupCommand;
        }
        set 
        {
            _openPopupCommand = value;
        }
    }

    #endregion

    #region Methods

    public void OpenPopupExecute(object parameter)
    {
        parameter = true;
        OnPropertyChanged("IsOpen");
    }

    #endregion

“彈出”彈出窗口和彈出窗口XAML的按鈕:

<Popup x:Name="FieldsPopup" Placement="Center" Width="400" Height="250" IsOpen="{Binding IsOpen}">
                    <StackPanel>
                        <TextBlock Background="LightBlue" HorizontalAlignment="Center" VerticalAlignment="Center" Height="250" Width="350" TextAlignment="Center" >This is a popup</TextBlock>
                    </StackPanel>
                </Popup>
<Button Name="button_PatientIdentifierList" Width="23" Height="23" Grid.Column="2" Foreground="Black" Background="#FFCDCDCD" BorderBrush="#FF707070" Margin="3.4,4,4,0" VerticalAlignment="Top" Command="{Binding OpenPopupCommand}"/>

您正在提出PropertyChange通知,但是我看不到您實際上在任何地方更改了屬性。

除非我沒有記錯,否則此代碼采用CommandParameter (此處稱為parameter )並將其設置為true

public void OpenPopupExecute(object parameter)
{
    parameter = true;
    OnPropertyChanged("IsOpen");
}

但是,在您的XAML中,Button.CommandParameter沒有綁定到任何東西

<Button Command="{Binding OpenPopupCommand}"/>

所以我懷疑parameter只是null ,實際上在這里什么也沒做。

您似乎缺少的是實際的IsOpen屬性定義,並在命令的Execute代碼中將其設置為true:

private bool _isOpen;
public bool IsOpen
{
    get
    {
        return _isOpen;
    }
    set 
    {
        _isOpen = value;
        OnPropertyChanged("IsOpen");
    }
}

public void OpenPopupExecute(object parameter)
{
    IsOpen = true; // Will call OnPropertyChanged in setter
}

附帶說明一下,我真的不喜歡WPF的默認PopupControl ,並且如果您決定也討厭WPF的默認PopupControl ,則可以在我的博客上自定義UserControl版本 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM