WinRT рдореЗрдВ рдЕрдиреБрдмрдВрдз рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рд╡рд┐рдВрдбреЛрдЬ 8)

рд╡рд┐рдВрдбреЛрдЬ 8 рдЖрдХрд░реНрд╖рдг рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдореБрдЦреНрдп рдЕрдиреБрдмрдВрдзреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЕрдиреБрдмрдВрдз рд╣реИред
рд╕реЗрдЯрд┐рдВрдЧ рдкреИрдирд▓ рдкреИрдирд▓ рдЪрдорддреНрдХрд╛рд░ рдореЗрдВ "рд╕реЗрдЯрд┐рдВрдЧ" рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЫрд╡рд┐

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдореЗрд╢рд╛ рдЗрд╕ рдкреИрдирд▓ рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ)ред
рдпрд╣ рдХрд╛рдлреА рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рди рд╕реЛрдЪреЗрдВ рдХрд┐ рдЖрд╡реЗрджрди рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЦреБрдж рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рд╣реИ рдФрд░ рдЙрд╕реА рдкреИрдирд▓ рдореЗрдВ рдЕрдкрдиреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдХрд╣рд╛рдВ рд░рдЦреЗрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рджреЛ рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:ред
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЕрдиреБрдмрдВрдз рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛
рдЕрдкрдиреА рдЦреБрдж рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреИрдирд▓ рдЬреЛрдбрд╝рдирд╛ред


рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЕрдиреБрдмрдВрдз рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдПрдХреАрдХрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣реИ:
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирдореВрдирд╛

рдЖрдЗрдП рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдЕрдиреБрдмрдВрдз рд╕рдорд░реНрдерди рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
OnNavigateTo рдФрд░ OnNavigateFrom рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдкреГрд╖реНрда рдкрд░, рд╣рдо рд╕реЗрдЯрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдИрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдкреГрд╖реНрда рдЫреЛрдбрд╝рддреЗ рд╕рдордп рдИрд╡реЗрдВрдЯ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

protected override void OnNavigatedTo(NavigationEventArgs e) { SettingsPane.GetForCurrentView().CommandsRequested += Settings_CommandsRequested; } protected override void OnNavigatedFrom(NavigationEventArgs e) { SettingsPane.GetForCurrentView().CommandsRequested -= Settings_CommandsRequested; } 


SettingsPane Windows.UI.ApplicationSettings рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ; рддрджрдиреБрд╕рд╛рд░, рдкреГрд╖реНрда рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рдорд╕реНрдерд╛рди рдШреЛрд╖рдгрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

 using Windows.UI.ApplicationSettings; 


рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрдорддреНрдХрд╛рд░ рдкреИрдирд▓ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдкреИрдирд▓ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ, рддреЛ CommandsRequested рдШрдЯрдирд╛ рдХреЛ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЙрди рдЖрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреА рд╣реЛрдЧреА рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рд╣реЗрд▓реЛ рдХрд╣рддреЗ рд╣реИрдВ! .. рдкрд╣рд▓рд╛ рдкреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рджреВрд╕рд░рд╛ рдХрдорд╛рдВрдб рдПрдХ рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред

 void Settings_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) { var viewAboutPage = new SettingsCommand("", "About", cmd => { (Window.Current.Content as Frame).Navigate(typeof (AboutPage)); }); args.Request.ApplicationCommands.Add(viewAboutPage); var sayHelloCommand = new SettingsCommand("", "Say Hello!", cmd => { new MessageDialog("Hello! World!").ShowAsync(); }); args.Request.ApplicationCommands.Add(sayHelloCommand); } 


рдпрджрд┐ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдирд▓ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЖрдЗрдЯрдо рд╣рдореЗрд╢рд╛ рдЙрдкрд▓рдмреНрдз рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рдореЗрд╢рд╛ рд╡рд╣рд╛рдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЕрдкрдиреА рдЦреБрдж рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреИрдирд▓ рдЬреЛрдбрд╝рдирд╛

рдЕрдХреНрд╕рд░ рд╣рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрдЯрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ рдкреИрдирд▓ рдореЗрдВ рд╣рдо рдЯреЙрдЧрд▓рд╕реНрд╡рд┐рдЪ, рд╕реНрд▓рд╛рдЗрдбрд░, рдХреЙрдореНрдмреЛрдХреНрд╕ рдпрд╛ рдЕрдиреНрдп рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рд╕рд░рд▓рддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЖрдк рд╕рдВрдХреНрд░рдордг рдХреЛ рдХреБрдЫ рдЕрд▓рдЧ рдкреЗрдЬ рдкрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рдорд╛рд╣рд┐рдд рд╣реИрдВред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдФрд░ рдмрд╕ рд╕рд╛рдЗрдб рдХрд╕реНрдЯрдо рдкреИрдирд▓ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдирд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг "рдЕрдиреБрдорддрд┐рдпрд╛рдБ" рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд▓рдЧрднрдЧ рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЫрд╡рд┐

WinRT рдПрдкреАрдЖрдИ рдПрдХ рддреИрдпрд╛рд░ рдкреИрдирд▓ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреИрдирд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рдХрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдпрд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ рд╣реИ, рд╕рдорд╛рдзрд╛рди рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рд╡рд╣рд╛рдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ UserControl (UC) рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрдВрдЧреА, рдЖрдЗрдП рдЗрд╕реЗ AppSettingsPanel рдХрд╣реЗрдВ

UC рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
 <UserControl .... Width="350"> <Grid Background="DarkGreen" Margin="0"> <Grid Margin="0" Height="78" VerticalAlignment="Top" Background="Green"> <Button HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Style="{StaticResource PreviousAppBarButtonStyle}" Click="ButtonGoBack_Click"/> </Grid> <ToggleSwitch Header="Enable details view" Margin="10,83,0,0" VerticalAlignment="Top" /> </Grid> </UserControl> 


350 рдХрд╛ рдорд╛рди рд╕реЗрдЯрд┐рдВрдЧ рдкреИрдирд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реИрдВрдбрд▓рд░ рдореЗрдВ, рдмреИрдХ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗрдВ:

 private void ButtonGoBack_Click(object sender, RoutedEventArgs e) { if (this.Parent is Popup) { (this.Parent as Popup).IsOpen = false; } SettingsPane.Show(); } 


рдЕрдм рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рдмреИрдХ" рджрдмрд╛рдПрдЧрд╛ рддреЛ рд╡рд░реНрддрдорд╛рди рдкреИрдирд▓ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреИрдирд▓ рдлрд┐рд░ рд╕реЗ рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛

рдЖрдЧреЗ, рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:

  public class CustomPanelCommand { private readonly SettingsCommand command; public CustomPanelCommand(UserControl parentPage, string label, Type typeOfPanel) { command = new SettingsCommand("", label, (cmd) => { customSettingsPopup = new Popup() { IsLightDismissEnabled = true, Height = parentPage.ActualHeight }; customSettingsPopup.Closed += customSettingsPopup_Closed; Window.Current.Activated += Current_Activated; var panel = Activator.CreateInstance(typeOfPanel) as UserControl; panel.UpdateLayout(); customSettingsPopup.Width = panel.Width; customSettingsPopup.Height = panel.Height = parentPage.ActualHeight; customSettingsPopup.Child = panel; customSettingsPopup.SetValue(Canvas.LeftProperty, parentPage.ActualWidth - customSettingsPopup.Width); customSettingsPopup.IsOpen = true; }); } public SettingsCommand GetCommand() { return command; } private Popup customSettingsPopup; void customSettingsPopup_Closed(object sender, object e) { Window.Current.Activated -= Current_Activated; } void Current_Activated(object sender, Windows.UI.Core.WindowActivatedEventArgs e) { if (e.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated) { customSettingsPopup.IsOpen = false; } } } 


рдЕрдм, рдЗрд╕ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдХреА рдорджрдж рд╕реЗ, рд╣рдо рдХрд╕реНрдЯрдо рдкреИрдирд▓ рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреИрдирд▓ рдХреЗ рд╕рд╛рде рдХрдИ рдмрдЯрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо "рдореЗрд░реЗ рдХрд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧ" рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкреИрдирд▓ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреЗрдЬ рдкрд░ рдПрдХ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВрдЧреЗ

 void Settings_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args) { var customCommand =new CustomPanelCommand(this, "My custom settings", typeof (AppSettingsPanel)).GetCommand(); args.Request.ApplicationCommands.Add(customCommand); } 


рдЕрдм, рдпрджрд┐ рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "рдореЗрд░реА рдХрд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕" рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдирд▓ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In148546/


All Articles