[英]Controlling the open and close of Popup from a Button click in 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.