我有mainPage.xaml和userControl.xaml.I在mainPage中調用了userControl。 mainPage有一個名爲「grd」的網格,userControl有一個名爲「btn」的按鈕。現在,當我點擊按鈕,然後點擊userControl的事件將被提出。在這種情況下,我想隱藏網格(在mainPage.xaml中)。我如何訪問userControls中的mainPage控件?在用戶控件中訪問主頁UI
回答
您可以使用此代碼訪問當前顯示的頁面:
var mainPage = (PhoneApplicationPage)((App)Application.Current).RootFrame.Content;
看看我的回答,在OP想設置appbar的知名度,我的回答會爲Grid
也行。
你能解釋它是如何工作的嗎? var isOpen =((AppBar)((BlankPage4)((Grid)this.Parent).Parent).BottomAppBar).IsOpen; –
如果您正在使用MVVM(如你在爲@ har07的回答您的評論說),你不應該在你的用戶控制網頁使用事件處理程序隱藏在主頁的網格。相反,您應該將命令綁定到控制頁面中的按鈕。這個命令應該改變主頁面的視圖模型,並且這個改變應該被該視圖模型通知給主頁面。
在下一個示例中,我使用了MVVM Light
,但其他MVVM庫的工作可能幾乎相同。
一個屬性添加到您的主網頁的瀏覽模式:
public class MainViewModel : BaseViewModel
{
…your code here
private bool _isValid;
public bool IsValid
{
get
{
return _isValid;
}
set
{
_isValid = value;
RaisePropertyChange("IsValid");
}
}
}
在主頁綁定Visibility
到IsValid
。現在
<Grid Visibility="{Binding IsValid, Converter={StaticResource converter}}">
…content here
</Grid>
,網格是可見的,如果IsValid的是真的。
添加命令到用戶控制的視圖模型:
public class UserControlViewModel : BaseViewModel
{
…your code here
public RelayCommand InvalidateGridCommand { get; private set; }
public UserControlViewModel()
{
InvalidateGridCommand = new RelayCommand(() => InvalidateGrid());
}
private void InvalidateGrid()
{
var mainvm = SimpleIoc.Default.GetInstance(MainViewModel);
mainvm.IsValid = false;
}
}
在用戶控制頁面綁定Button
到Command
:
<Button Command="{Binding InvalidateGridCommand}">
Invalidate
</Button>
現在,點擊按鈕將設置IsValid
上的MainViewModel
爲false,這又將隱藏Grid
。
對於Windows Phone 8的嘗試:
(((Application.Current as App).RootVisual as PhoneApplicationFrame).Content as Page)
我來到這裏尋找這個問題的答案和一些嘗試後,我可以使用訪問我的Windows Phone 8.1應用程序的主頁:
var mainPage = (MainPage)(Window.Current.Content as Frame).Content
.
要訪問聲明的MainPage控件,你也需要給他們一個x:Name
,改變他們的x:FieldModifier
到"Internal"
或"Public"
。
- 1. 如何在用戶控件中訪問主頁面控件值
- 2. 在Web用戶控件上訪問主頁面控件
- 3. ASP.NET用戶控件 - 訪問AddedControl中的主頁面對象
- 4. 在用戶控制中訪問用戶控件和主頁面值中的控件
- 5. 在子級用戶控件中訪問父頁面控件
- 6. 從用戶控件訪問主頁面公共變量
- 7. 從網頁用戶控件訪問頁面內的html控件
- 8. 在非母版頁中訪問主頁面控件?
- 9. 從WebMethod訪問主頁面控件
- 10. 從用戶控制/類/頁訪問主頁面公共方法
- 11. 從ascx用戶控件中的數據訪問中分離UI
- 12. 如何使用主控從asp:content頁面訪問masterpage上的用戶控件?
- 13. 在WPF中訪問用戶控件
- 14. 訪問內容頁面內主頁面的用戶控件屬性?
- 15. 訪問用戶控件的子控件
- 16. 使用FindControl訪問基頁上的主頁控件
- 17. 如何訪問該用戶控件在主窗口
- 18. 如何在用戶控件中訪問子控件的HtmlControl.Style?
- 19. Asp.Net用戶控件 - 訪問在
- 20. 從用戶控制頁面訪問MainWindow的控件。 WPF C#
- 21. 用戶控件上的訪問控制
- 22. 在用戶控制中訪問主程序的數據源
- 23. 從父頁面訪問用戶控件中的SQLDatasource。
- 24. C#用戶控件 - 從用戶控件中訪問控件屬性
- 25. 如何從包含該控件的主頁訪問用戶控件中的字段?
- 26. 從子用戶控件訪問基本用戶控件屬性
- 27. 在Swift中使用ID/Indentifier訪問UI控件[Mac OSX]?
- 28. ASP.NET頁面上的jQuery UI對話框(在用戶控件中)
- 29. 訪問主頁面控件不起作用
- 30. 主頁只能使用FindControl訪問控件
事件在userControl中;這會工作嗎? –
一定,已經試過了。 'Application.Current..'可以從windows phone應用程序的任何控件/頁面訪問,並返回相同的結果。 – har07
我無法使用它。你寫的代碼是wp7。在wp8中,我無法找到.RootFrame.Content。請解釋我使用mvvm的 –