簡體   English   中英

WPF如何從彈出頁面訪問MainPage元素

[英]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;
}

兩個問題:

  1. 已經有內部的“OK”按鈕MyNumpad.xaml 單擊Ok_Inside_Numpad按鈕可以訪問mainDisplaypopupDialog嗎? 如何將變量傳遞給MyNumpad構造函數?

  2. 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.

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