Windows IoT UWP Pivot Item with PasswordBox in a Content Dialog

184 Views Asked by At

I am trying to implement a passwordbox within a pivotitem with content dialog. I want to find out if upon clicking on the pivotitem using pointerpressed is suitable to trigger the dialog for password? Also how do handle the event once the pivotitem is clicked. Thanks.

XAML;

Title="Login"
PrimaryButtonText="OK"
SecondaryButtonText="Cancel"
PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
SecondaryButtonClick="ContentDialog_SecondaryButtonClick">

<Grid>
    <StackPanel>
        <PasswordBox x:Name="passwordBox" Width="300" Height="30" PlaceholderText="Enter password" PasswordChar="*"
                     PasswordChanged="PasswordBox_PasswordChanged"/>
        <TextBlock x:Name="statusText" Margin="3,10,2,10" Height="22"/>
    </StackPanel>
</Grid>

Update - 24-11-2017 I am not sure if this is the best was to verify my password. I also wanna find out after the content dialog closes, where do i further expand the XAML code? Hope I am expressing my scenario clearly here. Thanks.

<PivotItem Header="Settings" x:Name="settings" PointerPressed="settings_PointerPressed" >
                <ContentDialog Title="Login" x:Name="loginDialog"
                               PrimaryButtonText="OK"
                               SecondaryButtonText="Cancel"
                               PrimaryButtonClick="OK_PrimaryButtonClick"
                               SecondaryButtonClick="Cancel_SecondaryButtonClick">
                    <Grid>
                        <StackPanel>
                            <PasswordBox x:Name="passwordBox" Width="300" Height="40" PlaceholderText="Enter PIN" PasswordChar="*"
                                         PasswordChanged="passwordBox_PasswordChanged" IsPasswordRevealButtonEnabled="False">
                                <PasswordBox.InputScope>
                                    <InputScope>
                                        <InputScope.Names>
                                            <InputScopeName NameValue="NumericPin"/>
                                        </InputScope.Names>
                                    </InputScope>
                                </PasswordBox.InputScope>
                            </PasswordBox>
                            <TextBlock x:Name="passwordStatus" Margin="3,10,2,10" Height="22"/>
                        </StackPanel>
                    </Grid>
                </ContentDialog>

              </PivotItem>

        private async void settings_PointerPressed(object sender, PointerRoutedEventArgs e)
    {
        if(isPasswordGranted==false)
        {
            await loginDialog.ShowAsync();

            //PasswordBox passwordBox = new PasswordBox();
            //passwordBox.Header = "Enter password";

            InputScope scope = new InputScope();
            InputScopeName scopeName = new InputScopeName();
            scopeName.NameValue = InputScopeNameValue.NumericPin; //default = Password
            scope.Names.Add(scopeName);
            passwordBox.InputScope = scope;
        }


    }

   private void OK_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
    {
        if (passwordBox.Password == pinNumber)
        {
            passwordStatus.Text = "Password Granted!";
            isPasswordGranted = true;
        }
        else pivot.SelectedItem = home;
    }

    private void Cancel_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
    {
        pivot.SelectedItem = home;
    }
1

There are 1 best solutions below

5
Michael Xu On

Yes, it's suitable to trigger the dialog for password by using PointerPressed event. When the pointer indicates a press action (such as a touch down, mouse button down, pen down, or touchpad button down) within the bounding area of the PivotItem element, this event method will be invoked. Please see below codes:

*.XAML

    <PivotItem Header="PivotItem Header - 1" PointerPressed="PivotItem_PointerPressed">
        <ContentDialog Title="Login" x:Name="contentDialogForPwd"
                PrimaryButtonText="OK"
                SecondaryButtonText="Cancel"
                PrimaryButtonClick="ContentDialog_PrimaryButtonClick"
                SecondaryButtonClick="ContentDialog_SecondaryButtonClick">

            <Grid>
                <StackPanel>
                    <PasswordBox x:Name="passwordBox" Width="300" Height="30" PlaceholderText="Enter password" PasswordChar="*"
                 PasswordChanged="passwordBox_PasswordChanged"/>
                    <TextBlock x:Name="statusText" Margin="3,10,2,10" Height="22"/>
                </StackPanel>
            </Grid>
        </ContentDialog>
    </PivotItem>     

*.CS

    private async void PivotItem_PointerPressed(object sender, PointerRoutedEventArgs e)
    {
        ContentDialogResult result = await contentDialogForPwd.ShowAsync();
        if(result == ContentDialogResult.Primary)
        {
            //To do something when clicking Primary button
        }
        else if (result == ContentDialogResult.Secondary)
        {
            //To do something when clicking Secondary button
        }     
    }