0

I have a CommandBarFlyout implemented with Secondary Commands within Secondary Commands like so:

<Grid Margin="0,50">
                    <Grid.Resources>
                        <muxc:CommandBarFlyout Placement="Bottom" x:Name="CommandBarFlyout">
                            <AppBarButton ToolTipService.ToolTip="{Binding CommandBarButtonText}" Visibility="{Binding ToggleSimpleVisibility}">
                                <FontIcon Style="{StaticResource FontIconAppBar}" />
                            </AppBarButton>
                            <AppBarButton ToolTipService.ToolTip="{Binding CommandBarButtonText}" Visibility="{Binding ToggleSimpleVisibility}">
                                <FontIcon Style="{StaticResource FontIconAppBar}" />
                            </AppBarButton>
                            <AppBarButton ToolTipService.ToolTip="{Binding CommandBarButtonText}" Visibility="{Binding ToggleSimpleVisibility}">
                                <FontIcon Style="{StaticResource FontIconAppBar}" />
                            </AppBarButton>
                            <AppBarButton ToolTipService.ToolTip="{Binding CommandBarButtonText}" Visibility="{Binding ToggleSimpleVisibility}">
                                <FontIcon Style="{StaticResource FontIconAppBar}" />
                            </AppBarButton>

                            <AppBarToggleButton ToolTipService.ToolTip="{Binding CommandBarButtonText}" Visibility="{Binding ToggleVisibility}">
                                <FontIcon Style="{StaticResource FontIconAppBar}"/>
                            </AppBarToggleButton>
                            <AppBarToggleButton ToolTipService.ToolTip="{Binding CommandBarButtonText}" Visibility="{Binding ToggleVisibility}">
                                <FontIcon Style="{StaticResource FontIconAppBar}" />
                            </AppBarToggleButton>
                            <AppBarToggleButton ToolTipService.ToolTip="{Binding CommandBarButtonText}" Visibility="{Binding ToggleVisibility}">
                                <FontIcon Style="{StaticResource FontIconAppBar}" />
                            </AppBarToggleButton>
                            <AppBarToggleButton ToolTipService.ToolTip="{Binding CommandBarButtonText}" Visibility="{Binding ToggleVisibility}">
                                <FontIcon Style="{StaticResource FontIconAppBar}"/>
                            </AppBarToggleButton>

                            <muxc:CommandBarFlyout.SecondaryCommands>
                                <AppBarButton x:Name="CascadingAppBarButton" Visibility="Collapsed" Label="{Binding CommandBarButtonText}">
                                    <AppBarButton.Flyout>
                                        <CommandBarFlyout Placement="Right">
                                            <CommandBarFlyout.SecondaryCommands>
                                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                                            </CommandBarFlyout.SecondaryCommands>
                                        </CommandBarFlyout>
                                    </AppBarButton.Flyout>
                                </AppBarButton>
                                <AppBarButton  Label="{Binding CommandBarButtonText}" />
                                <AppBarButton  Label="{Binding CommandBarButtonText}" />
                                <AppBarSeparator />
                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                            </muxc:CommandBarFlyout.SecondaryCommands>
                        </muxc:CommandBarFlyout>
                    </Grid.Resources>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="2*" />
                        </Grid.ColumnDefinitions>
                        <StackPanel Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center">
                            <Button x:Name="CommandButton"
                                Content="{Binding ButtonText}"
                                Click="ButtonClick"
                                ContextRequested="ButtonContextRequested" />
                        </StackPanel>
                        <StackPanel Grid.Column="1" HorizontalAlignment="Center">
                            <CheckBox x:Name="ToggleCheckbox" Content="{Binding ToggleButtonCheckBoxTitle}" Checked="ToggleButton_Checked" Unchecked="ToggleButton_Unchecked" IsChecked="False" />
                            <CheckBox Content="{Binding CascadingMenuCheckBoxTitle}" Checked="CascadingMenu_Checked" Unchecked="CascadingMenu_Unchecked" />
                        </StackPanel>
                    </Grid>
                </Grid>
            </StackPanel>
        </Grid>

I tried testing this code adding specifically the secondary commands within the XAML Controls Gallery code, and reproduced the same behavior I observed in my implementation.

In design the expected behavior is the highlight should persist enter image description here

In development the highlighting is lost after 2 seconds, and stays like this: enter image description here

XAML Controls Gallery has the following example:

enter image description here

So the highlighting works as expected for Primary Commands and Secondary Commands, but incorrectly in the implementation above.

Question is: Is this really a bug or incorrect implementation due to nesting of Secondary Commands?

Blondie
  • 9
  • 2
  • Does my solution work for you? – Roy Li - MSFT Nov 23 '22 at 01:17
  • Hello Roy! Thanks for the help. The solution you provided definitely worked, but for the purposes of my project and to keep in sync with the design available for the project, I just documented the bug in my repository and opened an issue with Microsoft. – Blondie Nov 23 '22 at 20:18

1 Answers1

0

That's an interesting behavior. I could reproduce this behavior on my side using your code. Then I tried the code from the official document - Create a command bar flyout and added the CascadingAppBarButton from your code to the sample code. The result shows that the highlighting works as expected.

After comparing the code, I found a simple change might help to correct this behavior. You might need to set the Icon property of the AppBarButton.

Here is the code I use that works correctly. As you could see, I just set the Icon property for the last AppBarButton.

  <muxc:CommandBarFlyout.SecondaryCommands>
                <AppBarButton x:Name="CascadingAppBarButton" Visibility="Visible" Label="{Binding CommandBarButtonText}">
                    <AppBarButton.Flyout>
                        <CommandBarFlyout Placement="Right">
                            <CommandBarFlyout.SecondaryCommands>
                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                            </CommandBarFlyout.SecondaryCommands>
                        </CommandBarFlyout>
                    </AppBarButton.Flyout>
                </AppBarButton>
                <AppBarButton  Label="{Binding CommandBarButtonText}" />
                <AppBarButton  Label="{Binding CommandBarButtonText}" />
                <AppBarSeparator />
                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" />
                <AppBarToggleButton  Label="{Binding CommandBarToggleButtonText}" Icon="Delete" />
            </muxc:CommandBarFlyout.SecondaryCommands>
        </muxc:CommandBarFlyout>

It's just a workaround for this behavior. If you want to dig further into this behavior. I'd suggest you open an issue and report this in the WinUI-GitHub

Roy Li - MSFT
  • 8,043
  • 1
  • 7
  • 13