2014-01-07 26 views
0

我有mainPage.xaml和userControl.xaml.I在mainPage中調用了userControl。 mainPage有一個名爲「grd」的網格,userControl有一個名爲「btn」的按鈕。現在,當我點擊按鈕,然後點擊userControl的事件將被提出。在這種情況下,我想隱藏網格(在mainPage.xaml中)。我如何訪問userControls中的mainPage控件?在用戶控件中訪問主頁UI

回答

1

您可以使用此代碼訪問當前顯示的頁面:

var mainPage = (PhoneApplicationPage)((App)Application.Current).RootFrame.Content; 
+0

事件在userControl中;這會工作嗎? –

+0

一定,已經試過了。 'Application.Current..'可以從windows phone應用程序的任何控件/頁面訪問,並返回相同的結果。 – har07

+0

我無法使用它。你寫的代碼是wp7。在wp8中,我無法找到.RootFrame.Content。請解釋我使用mvvm的 –

0

如果您正在使用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"); 
    } 
    } 
} 

在主頁綁定VisibilityIsValid。現在

<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; 
    } 
} 

在用戶控制頁面綁定ButtonCommand

<Button Command="{Binding InvalidateGridCommand}"> 
    Invalidate 
</Button> 

現在,點擊按鈕將設置IsValid上的MainViewModel爲false,這又將隱藏Grid

2

對於Windows Phone 8的嘗試:

(((Application.Current as App).RootVisual as PhoneApplicationFrame).Content as Page) 
0

我來到這裏尋找這個問題的答案和一些嘗試後,我可以使用訪問我的Windows Phone 8.1應用程序的主頁:

 
var mainPage = (MainPage)(Window.Current.Content as Frame).Content. 

要訪問聲明的MainPage控件,你也需要給他們一個x:Name,改變他們的x:FieldModifier"Internal""Public"

相關問題