0

私はWindows 8メトロアプリに取り組んでおり、以下のコードによって追加される複数のSettingsFlyoutアイテムを持っています

SettingsCommand cmd1 = new SettingsCommand("sample", "Color Settings", (x) =>
        {
            // create a new instance of the flyout
            SettingsFlyout settings = new SettingsFlyout();
            // set the desired width.  If you leave this out, you will get Narrow (346px)
            // optionally change header and content background colors away from defaults (recommended)
            // if using Callisto's AppManifestHelper you can grab the element from some member var you held it in
            // settings.HeaderBrush = new SolidColorBrush(App.VisualElements.BackgroundColor);
            settings.HeaderBrush = new SolidColorBrush(Colors.Black);
            settings.HeaderText = string.Format("Color Settings", App.VisualElements.DisplayName);
            settings.Background = new SolidColorBrush(_background);
            settings.Margin = new Thickness(0);
            // provide some logo (preferrably the smallogo the app uses)
            BitmapImage bmp = new BitmapImage(App.VisualElements.SmallLogoUri);
            settings.SmallLogoImageSource = bmp;

            // set the content for the flyout
            settings.Content = new ColorSettings();
            settings.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Stretch;

            // open it
            settings.IsOpen = true;

            // this is only for the test app and not needed
            // you would not use this code in your real app
            // ObjectTracker.Track(settings);
        });

現在 (SettingsPane.Show()) を使用して、追加されたフライアウト アイテム リストを表示できますが、フライアウト リストを開く代わりに、設定フライアウト アイテムをプログラムで開きたいと考えています。

4

3 に答える 3

0

新しいクラスを作成する

public class SettingsFlyout
{
    private const int _width = 346;
    private Popup _popup;

    /// <summary>
    /// Show the Flyout with the UserControl as content
    /// </summary>
    /// <param name="control"></param>
    public void ShowFlyout(UserControl control)
    {
        _popup = new Popup();
        _popup.Closed += OnPopupClosed;
        Window.Current.Activated += OnWindowActivated;
        _popup.IsLightDismissEnabled = true;
        _popup.Width = _width;
        _popup.Height = Window.Current.Bounds.Height;

        control.Width = _width;
        control.Height = Window.Current.Bounds.Height;

        _popup.Child = control;
        _popup.SetValue(Canvas.LeftProperty, Window.Current.Bounds.Width - _width);
        _popup.SetValue(Canvas.TopProperty, 0);
        _popup.IsOpen = true;
    }

    private void OnWindowActivated(object sender, Windows.UI.Core.WindowActivatedEventArgs e)
    {
        if (e.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated)
        {
            _popup.IsOpen = false;
        }
    }

    void OnPopupClosed(object sender, object e)
    {
        Window.Current.Activated -= OnWindowActivated;
    }
}

XAMLページでボタンを取得し、ボタンクリックイベントを記述します。

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    SettingsFlyout flyout = new SettingsFlyout();
    flyout.ShowFlyout(new FlyoutContentUserControl());
}

FlyoutContentUserControl表示したいユーザーコントロールが1つあることに注意してください。

クレジットはQ42.WinRTに送られます

于 2013-02-05T09:43:36.630 に答える
0

App.xaml.cs に以下を追加して、 SettingsFlyoutを登録します。例: CustomSetting ...

protected override void OnWindowCreated(WindowCreatedEventArgs args)
{
    SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested;
}

private void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
{
    args.Request.ApplicationCommands.Add(new SettingsCommand(
            "Custom Setting", "Custom Setting", (handler) => ShowCustomSettingFlyout()));
}

public void ShowCustomSettingFlyout()
{
    CustomSetting CustomSettingFlyout = new CustomSetting();
    CustomSettingFlyout.Show();
}

次に、プログラムで CustomSetting フライアウトを開きたいコード内の任意の場所で、ボタン クリックのイベント ハンドラーなどで ShowCustomSettingFlyout を呼び出します。

void Button_Click_1(object sender, RoutedEventArgs e)
{
    ShowCustomSettingFlyout()
}

適応元:クイックスタート: アプリ設定の追加 (XAML)

于 2014-10-24T13:52:46.547 に答える
0

投稿したコードはSettingsCommands、システム設定ペインに登録します。コマンドがシステム設定ペインから呼び出されると、SettingsFlyoutインスタンスを新規作成して設定IsOpen=Trueします。

このコードを別のメソッド (例: ) にリファクタリングし、イベント ハンドラShowColorSettingsFlyout()からそのメソッドを呼び出すだけです。Button.Click新しい Callisto を作成して、どこにでもSettingsFlyout設定できますIsOpen=True

于 2013-02-05T22:36:15.053 に答える