[英]WPF how to access MainPage elements from Popup Page
我正在構建一個需要用戶輸入數字的WPF應用程序。 我使用NavigationWindow和已經建立了一個Page
,其中包含一個數字鍵盤。 該應用程序需要多次輸入數字。 靈感來自此 ,我想提出的數字Page
一個內部Frame
一內Popup
如下:
<Grid Name="mainDisplay">
<Popup Name="popupDialog" PlacementTarget="{Binding ElementName=aInputBox Placement="Center">
<StackPanel>
<Frame Source="MyNumpad.xaml"/>
<Button Click="OK_Outside_Click">Ok_Outside_Numpad</Button>
</StackPanel>
</Popup>
// invalid comment and other stuff in grid....
</Grid>
單擊“ Ok_Outside_Numpad” Button
,數字鍵盤消失,並重新啟用主頁。 代碼如下:
private void OK_Outside_Click(object sender, RoutedEventArgs e)
{
popupDialog.IsOpen = false;
mainDisplay.IsEnabled = true;
}
兩個問題:
已經有內部的“OK”按鈕MyNumpad.xaml
。 單擊Ok_Inside_Numpad
按鈕可以訪問mainDisplay
和popupDialog
嗎? 如何將變量傳遞給MyNumpad
構造函數?
MyNumpad
退出時如何獲取用戶數字輸入?
謝謝! 請注意,我是WPF的新手,不確定我的方法是否有用。 任何想法都歡迎!
正確的方法是將View
(NavigationWindow和MyNumpad.xaml) 綁定到一個ViewModel
(或幾個ViewModel)。 使用數據綁定,只需將值設置為false即可關閉Popup(因為Popup的IsOpen屬性已綁定到該值)。 控件位於何處都沒有關系,因為您無需在代碼中操縱控件。
但是在閱讀那篇長篇文章並開始學習MVVM之前,您可以對代碼進行一些修改以使其正常運行。
您無法從托管頁面訪問MainPage元素,因為托管頁面沒有對MainPage的引用。 如您所料,您可以將MainPage傳遞給MyNumpad
的構造MyNumpad
(在代碼中進行操作,並記住修改MyNumpad的構造函數)。
public MainWindow()
{
InitializeComponent();
MyNumpad numpad = new MyNumpad(this);
frame1.Navigate(numpad);
}
然后,您可以從彈出頁面訪問MainPage元素。
但是,將Click事件處理程序添加到Popup的按鈕中比較容易,因為該事件處理程序是在MainWindow中定義的,因此可以訪問MainWindow中的所有控件。 (請記住要刪除MyNumpad內部定義的事件處理程序。)
string strNumber;
public MainWindow()
{
InitializeComponent();
MyNumpad numpad = new MyNumpad();
numpad.button1.AddHandler(Button.ClickEvent, new RoutedEventHandler(
(s, e) =>
{
//suppose there is a TextBox in the page to accept user input
strNumber = numpad.InputTextBox.Text;
popupDialog.IsOpen = false;
mainDisplay.IsEnabled = true;
}), false);
frame1.Navigate(numpad);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.