0

Freeman の本 "Metro Revealed" (ところで、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>
    . . .

「メイン」ページの関連する「コード ビハインド」:

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

YetpopupSectionNameはクラスではなく、それが存在するクラスは public です。私は何をすべきか?

4

3 に答える 3

2

TimeAndSpaceLines.View.TSLsSettingsインスタンス名ではなく、クラス名です。必要なのはインスタンスの名前です: hubPageSettingsFlyout. バインドを使用することをお勧めします。popupSectionName IsLightDismissEnabledそうすれば、UI 要素を見つけようとする必要がなくなります。代わりに、バインドされているプロパティの値を確認するだけです。

于 2012-11-03T04:52:13.850 に答える
1

少し違いました

を作成する代わりに、を作成しUserControlBasicPageメインページからそのページのインスタンスを作成しました(以下を参照var mypane = new CreateProvider {Height = Window.Current.Bounds.Height};)。ここCreateProviderで、は私の好きなXAMLものに渡すページです。このように試してみてください。あなたもうまくいくと思います。ユーザーコントロールをlikeに割り当てるだけです。Popup_providerPopup.Child = mypane;UserControlPopup_popup.Child = 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;
于 2012-11-03T07:22:16.127 に答える
1

「メイン」ページの関連する「分離コード」からこれを試してください。

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

これはうまくいきます!

于 2012-11-04T15:18:32.293 に答える