2012-11-02 2 views
0

Freeman의 책 "Metro Revealed"(BTW는 지금까지 사용 가능한 것들 중 최고 였고, 100 페이지 이하 였음)에서 수집 할 수있는 것을 토대로, 설정 플라이 아웃 (팝업).내 팝업을 어떻게 참조 할 수 있습니까?

이 사용자 제어/팝업은 다음과 같습니다 :

나는이 관련 코드가

<UserControl 
    x:Class="TimeAndSpaceLines.View.TSLsSettings" 
    . . . 
    <Popup x:Name="popupSectionName" IsLightDismissEnabled="True" > 
    . . . 
    </Popup> 
</UserControl> 

"메인"페이지의 XAML :

<common:LayoutAwarePage 
    x:Name="pageRoot" 
    . . . 
    xmlns:settingsflyout="using:TimeAndSpaceLines.View" 
    . . . 
     </Grid> 
     <settingsflyout:TSLsSettings x:Name="hubPageSettingsFlyout"/> 
     <VisualStateManager.VisualStateGroups> 
    . . . 

"메인을 "페이지의 적절한"코드 숨김 ":

그러나 0
public ItemsPage() 
{ 
    InitializeComponent(); 
    SettingsPane.GetForCurrentView().CommandsRequested += OnSettingsPaneCommandRequested; 
} 

private void OnSettingsPaneCommandRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) 
{ 
    // Add the commands one by one to the settings panel 
    args.Request.ApplicationCommands.Add(new SettingsCommand("commandSetSection1Name", 
                  "Change the name of Section 1", SetAndSaveSectionNames)); 
. . .   
} 

, 내가이 길을 열려고 :

private void SetAndSaveSectionNames(IUICommand command) 
{ 
    TimeAndSpaceLines.View.TSLsSettings.popupSectionName.IsOpen = true; 
    . . . 
} 

나는 맞이 해요 :

An object reference is required for the non-static field, method, or property 
'TimeAndSpaceLines.View.TSLsSettings.popupSectionName' 

과 : 아직

'TimeAndSpaceLines.View.TSLsSettings.popupSectionName' is inaccessible due to its protection level 

popupSectionName 수업이 아니며 클래스가 상주하는 클래스입니다. s는 공개입니다. 어떻게해야합니까?

+0

의 SetAndSaveSectionNames는 호출이 hubPageSettingsFlyout.popupSectionName.IsOpen = true가 아니어야합니다. –

+0

교체 할 때 : TimeAndSpaceLines.View.TSLsSettings.popupSectionName.IsOpen = true; with this : hubPageSettingsFlyout.popupSectionName.IsOpen = true; ... "TimeAndSpaceLines.View.TSLsSettings."가 표시됩니다.popupSectionName은 '인해 보호 수준 " 는 XAML에서 hubPageSettingsFlyout에 대한 선언은 그래서 난 아직도 혼동하고있어 아마 그것을 가지고있다. 모든 잘못, 나는 다시 걸음을 다시 시작해야합니다 –

답변

1

는 "기본"페이지의 관련 "코드 숨김"에서이보십시오!

2

TimeAndSpaceLines.View.TSLsSettings은 인스턴스 이름이 아니라 클래스 이름입니다. 당신이 원하는 것은 인스턴스의 이름입니다 : hubPageSettingsFlyout. popupSectionNameIsLightDismissEnabled에 바인딩을 사용하는 것이 좋습니다. 그러면 UI 요소를 찾으려고하지 않고 대신 바인딩 된 모든 속성의 값을 확인하십시오.

1

는 그것이

대신 UserControl 만들기, 난 그냥 BasicPage 다음 내 메인 페이지에서 해당 페이지의 인스턴스를 생성을 만들어 조금 다른 곳 CreateProvider 내가 패스 XAML 페이지입니다 (var mypane = new CreateProvider {Height = Window.Current.Bounds.Height}; 아래 참조)했다 내 Popup_providerPopup.Child = mypane;입니다. 이 방법으로 시도해보십시오. 귀하의 UserControl도 올바르게 작동 할 것입니다. 사용자 컨트롤을 Popup (_popup.Child = popupSectionName;)으로 지정하십시오.

var myPopUp = (PopUp)hubPageSettingsFlyout.FindName("popupSectionName"); 

이 것입니다 작품 :

 // Create a Popup window which will contain our flyout. 
     _providerPopup = new Popup 
          { 
           Height = Window.Current.Bounds.Height, 
           ChildTransitions = new TransitionCollection 
                 { 
                  new PaneThemeTransition 
                   { 
                    Edge = 
                     (SettingsPane.Edge == 
                     SettingsEdgeLocation.Right) 
                      ? EdgeTransitionLocation.Right 
                      : EdgeTransitionLocation.Left 
                   } 
                 } 
          }; 

     // Add the proper animation for the panel. 

     // Create a SettingsFlyout the same dimenssions as the Popup. 
     var mypane = new CreateProvider {Height = Window.Current.Bounds.Height}; 

     // Place the SettingsFlyout inside our Popup window. 
     _providerPopup.Child = mypane; 

     // Let's define the location of our Popup. 
     _providerPopup.SetValue(Canvas.LeftProperty, 
           SettingsPane.Edge == SettingsEdgeLocation.Right 
            ? (Window.Current.Bounds.Width - SettingsWidth) 
            : 0); 
     _providerPopup.SetValue(Canvas.TopProperty, 0); 
     _providerPopup.IsOpen = true; 
+0

내가 그 일을하고 믿는다 개인 무효 OnSettingsPaneCommandRequested (SettingsPane 보낸 사람, SettingsPaneCommandsRequestedEventArgs 인수를) { SettingsCommand cmd를 = 새로운 SettingsCommand ("샘플". "소리 옵션", (x) => { _settingsPopup = new Popup(); ... var settingsPane = 새 TSLsSettings(); . . . _settingsPopup.Child = settingsPane; _settingsPopup.IsOpen = true; }}); args.Request.ApplicationCommands.Add (cmd); } –