簡體   English   中英

C#/WPF - 從父窗口獲取子用戶控件內的對象

[英]C# / WPF - Getting object inside a child user control from parent window

不太熟悉 WPF 和 C#,所以如果這是公然錯誤的,請糾正我。 在 VSExpress2015 .NET Framework 4.5 中工作。 我在下面大大簡化了我的代碼,所以知道命名空間/庫引用在那里。

假設我有一個窗口,里面有一個 Button 和 ContentControl:

<Window x:Class="Project.MainWindow">
    <Grid>
        <Button Name="Submit_Btn" Click="Submit_Btn_Click">
        <ContentControl Name="MainContentControl">
    </Grid>
</Window>

我的項目中還有幾個帶有 XAML 的用戶控制文件,如下所示:

<UserControl x:Class="Project.UserControl1">
    <Grid>
        <TextBox Name="TxtBox1">
    </Grid>
</Usercontrol>

我在 MainWindow 的后端有代碼可以將適當的 UserControl 動態加載到“MainContentControl”對象中。 但是,我想從 MainWindow 的 Submit_Btn_Click 函數中引用當前加載的 UserControl內部的對象。 例如,在 MainWindow.cs 中,執行如下操作:

private void Submit_Btn_Click(object sender, RoutedEventArgs e)
{
    if(MainContentControl is currently loaded with UserControl1)
        Do_Something_Function(MainContentControl.TxtBox1.Text);
}

這里的主要問題是我不知道如何從父 MainWindow 的范圍內調用 TextBox1 元素。 我也不確定如何驗證 if 條件(確認控件當前已加載)。 有沒有人知道一種以不同方式思考這個甚至直接引用對象的方法(盡管這可能不是一個好主意)?

——

我根本不使用/不熟悉 MVVM(還),而且我並不特別關心最佳性能,因為這是一個一次性的臨時項目,很快就會消亡並重新工作。 我已經閱讀了如何從孩子訪問父窗口中的數據的方法,但我沒有找到真正與此匹配的場景。

再一次,我仍然熟悉 C#、WPF 和一般編碼實踐(已經有幾年了),所以如果在這里使用 ContentControl 或 UserControl 不是最佳的,(或者混合兩者沒有意義)那信息將不勝感激; 然而,在這種情況下,我更關心的是讓這個工作,直到我以后可以學習更多正確的技術。

無需嘗試訪問 UserControl 內的 TextBox,您可以公開 UserControl 本身的屬性和方法以與內部內容進行交互。 在您的情況下,您可以添加一個返回 TextBox.Text 的當前值的屬性。 您還可以添加依賴項屬性以方便綁定。

您可以使用LogicalTreeHelper按名稱搜索。

因此,對於您訪問TextBox1的示例

 var txtBox = LogicalTreeHelper.FindLogicalNode(MainContentControl, "TextBox1") as TextBox;
 Do_Something_Function(txtBox?.Text);

看起來確實應該改進設計,但是為了讓它工作,您可以執行以下操作:

    private void Submit_Btn_Click(object sender, RoutedEventArgs e)
    {
        var controlAsUserControl1 = MainContentControl.Content as UserControl1;
        if (controlAsUserControl1 != null)
        {
            Debug.WriteLine(controlAsUserControl1.TxtBox1.Text);
        }
    }

暫無
暫無

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

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