Search code examples
wpfxamldata-bindingwpf-controlssubmenu

Why are submenu items not visible?


I have bound the menu and submenu to a list of user defined class type with a string and List as its properties.

public class HouseInfo
    {
        public string House
        {
            get;
            set;
        }

        public List<String> Details
        {
            get;
            set;

        }

    }

 public List<HouseInfo> HouseInfos { get; set; }

This is the xaml for the menu:

 <Menu x:Name="menu"
                              VerticalAlignment="Top"
                              Grid.Row="1"
                              Grid.Column="4"
                              Height="19">
                            <MenuItem ItemsSource="{Binding HouseInfos}"
                                      Padding="0"
                                      Background="#0068FF11"
                                      VerticalAlignment="Top"
                                      RenderTransformOrigin="0.5,0.5"
                                      Height="19"
                                      Width="105">
                                <MenuItem.RenderTransform>
                                    <TransformGroup>
                                        <ScaleTransform />
                                        <SkewTransform />
                                        <RotateTransform />
                                        <TranslateTransform X="0.5" />
                                    </TransformGroup>
                                </MenuItem.RenderTransform>
                                <MenuItem.Header>
                                    <Label x:Name="headerYears"
                                           Margin="0"
                                           Padding="0"
                                           Content="Houses"
                                           Background="#00FF0000"
                                           MaxHeight="18"
                                           UseLayoutRounding="False"
                                           RenderTransformOrigin="0,0"
                                           HorizontalContentAlignment="Center" />
                                </MenuItem.Header>
                                <MenuItem.ItemContainerStyle>
                                    <Style TargetType="{x:Type MenuItem}">
                                        <Setter Property="Header"
                                                Value="{Binding House}" />
                                        <Setter Property="ItemsSource"
                                                Value="{Binding InfoPoints}" />
                                    </Style>
                                </MenuItem.ItemContainerStyle>
                            </MenuItem>
                        </Menu>

The data is bound in submenus and menu properly but for some unknown reason I cant figure out the submenu text is not visible even though the number of submenu items generated are equal to list count in viewmodel.

How can I make them visible?

I tried setting the padding, alignment, foreground, and every property I knew but still the submenu item text is not visible.

Invisible Submenu items


Solution

  • I could not get the sub-menu items to display either. Took a bit but I found a way to get them to display. The issue is that the sub-menu items are tied to Details and not House so the Header was not getting this. So I added another ItemContainerStyle like this:

    <MenuItem.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Header" Value="{Binding Path=House}" />
            <Setter Property="ItemsSource" Value="{Binding Details}" />
            <Setter Property="ItemContainerStyle">
                <Setter.Value>
                    <Style TargetType="MenuItem">
                        <Setter Property="Header" Value="{Binding}" />
                    </Style>
                </Setter.Value>
            </Setter>
        </Style>
    </MenuItem.ItemContainerStyle>