c# – Windows 8 Metro App进行设置弹出窗口
发布时间:2020-12-16 00:22:25 所属栏目:百科 来源:网络整理
导读:我正在创建一个游戏,我希望用户能够从右侧滑动并打开 Windows 8中的魅力栏中的设置. 我尝试了很多东西,但我还没有成功.如果有人这样做了,请告诉我你是怎么做到的.我正在使用Visual Studio 2012 express. 解决方法 更新: 从Windows 8.1及更高版本开始,Window
我正在创建一个游戏,我希望用户能够从右侧滑动并打开
Windows 8中的魅力栏中的设置.
我尝试了很多东西,但我还没有成功.如果有人这样做了,请告诉我你是怎么做到的.我正在使用Visual Studio 2012 express. 解决方法
更新:
从Windows 8.1及更高版本开始,Windows Store App中的控件集合中添加了一个SettingsFlyout控件. 添加=>新=> SettingsFlyout 然后像这样添加它: sealed partial class App { public App() { this.InitializeComponent(); this.Suspending += OnSuspending; } protected override void OnWindowCreated(WindowCreatedEventArgs args) { SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested; } private void OnCommandsRequested(SettingsPane sender,SettingsPaneCommandsRequestedEventArgs args) { var setting = new SettingsCommand("MySetting","MySetting",handler => new MySettingsFlyout().Show()); args.Request.ApplicationCommands.Add(setting); } 结果: 老做法: 以下是在Windows 8中使用xaml和c#的方法 1.创建一个xaml用户控件 <UserControl x:Class="CSharp_Settings.Settings.Help_Settings" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="646"> <Border BorderBrush="#FF590151" BorderThickness="1"> <Grid Background="White" VerticalAlignment="Stretch"> <Grid.RowDefinitions> <RowDefinition Height="80"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid Background="#FFFF00F2" Grid.Row="0"> <Grid Margin="40,20,17,13"> <Grid.Transitions> <TransitionCollection> <EntranceThemeTransition FromHorizontalOffset="50" /> </TransitionCollection> </Grid.Transitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="50" /> <ColumnDefinition Width="*" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Button Click="Button_Click_1" Margin="0,3,0" Grid.Column="0" HorizontalAlignment="Left" Style="{StaticResource BackButtonStyle}"/> <TextBlock Margin="10,5,0" Grid.Column="1" FontFamily="Segoe UI" FontWeight="SemiLight" FontSize="24.6667" Text="Help" HorizontalAlignment="Left" /> <Image Source="/Assets/icon.png" HorizontalAlignment="Right" Grid.Column="2" Margin="0,6,0" /> </Grid> </Grid> <Grid Grid.Row="1" Margin="40,24,23,0" VerticalAlignment="Top"> <Grid.Transitions> <TransitionCollection> <EntranceThemeTransition FromHorizontalOffset="120" /> </TransitionCollection> </Grid.Transitions> <TextBlock Text="Something" Foreground="Black"/> </Grid> </Grid> </Border> </UserControl> usercontrol的codebehind using Windows.UI.ApplicationSettings; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls.Primitives; namespace CSharp_Settings.Settings { public sealed partial class Help_Settings { public Help_Settings() { InitializeComponent(); } private void Button_Click_1(object sender,RoutedEventArgs e) { if (Parent is Popup) ((Popup)Parent).IsOpen = false; SettingsPane.Show(); } } } 在应用程序中注册设置窗格 using CSharp_Settings.Settings; using Windows.Foundation; using Windows.UI.ApplicationSettings; using Windows.UI.Core; using Windows.UI.Popups; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; namespace CSharp_Settings { public sealed partial class MainPage { public MainPage() { InitializeComponent(); _window = Window.Current.Bounds; Window.Current.SizeChanged += OnWindowSizeChanged; SettingsPane.GetForCurrentView().CommandsRequested += CommandsRequested; } private Rect _window; private Popup _popUp; private const double WIDTH = 646; private void OnWindowSizeChanged(object sender,WindowSizeChangedEventArgs e) { _window = Window.Current.Bounds; } private void CommandsRequested(SettingsPane sender,SettingsPaneCommandsRequestedEventArgs args) { args.Request.ApplicationCommands.Add(new SettingsCommand("help","Help",Handler)); } private void Handler(IUICommand command) { _popUp = new Popup { Width = WIDTH,Height = _window.Height,IsLightDismissEnabled = true,IsOpen = true }; _popUp.Closed += OnPopupClosed; Window.Current.Activated += OnWindowActivated; _popUp.Child = new Help_Settings {Width = WIDTH,Height = _window.Height}; _popUp.SetValue(Canvas.LeftProperty,SettingsPane.Edge == SettingsEdgeLocation.Right ? (_window.Width - WIDTH) : 0); _popUp.SetValue(Canvas.TopProperty,0); } private void OnWindowActivated(object sender,WindowActivatedEventArgs e) { if (e.WindowActivationState == CoreWindowActivationState.Deactivated) _popUp.IsOpen = false; } private void OnPopupClosed(object sender,object e) { Window.Current.Activated -= OnWindowActivated; } } } 在Javascript和html中你用html创建: <!doctype HTML> <html> <body> <div style="border: 1px solid #AB00A5" data-win-control="WinJS.UI.SettingsFlyout" data-win-options="{settingsCommandId:'help',width:'narrow'}"> <div class="win-ui-dark win-header" style="background-color:#FF00F7"> <button type="button" onclick="WinJS.UI.SettingsFlyout.show()" class="win-backbutton"></button> <div class="win-label"> Help</div> <img src="../images/icon.png" style="position: absolute; right: 40px; width:35px; height:35px"/> </div> <div class="win-content win-settings-section"> <h3>Help!</h3> <p> No help for you muahahaha</p> </div> </div> </body> </html> Function to register the settings pane: (function () { "use strict"; WinJS.Application.onsettings = function (e) { e.detail.applicationcommands = { "about": { title: "About",href: "/html/settings_about.html" },"help": { title: "Help",href: "/html/settings_help.html" } }; WinJS.UI.SettingsFlyout.populateSettings(e); }; WinJS.Application.start(); })(); 请记住以下事项: >为入口点使用一个单词标签 >建议最多4个入口点>窄= 346像素>宽= 646像素.>高度与屏幕相同.>标题:入口点app图标的后退名称,背景颜色与app tile相同> Settingspanel边框颜色应比标题颜色深20%,背景应为白色.>滚动OK但最多两倍高度>没有用于导航,命令或提交更改的按钮>单击入口点时无直接操作权限命令由系统控制>应该是带有入口动画的弹出窗口>轻微不允许应与设置位于同一侧(使用SettingsEdgeLocation属性) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |