wpfxamlscrollviewerexpander

Vertical Bar in ScrollViewer (VerticalScrollBar) do not show with UserControl like Expander in WPF XAML


I have an UserControl that contains an Expander and it contains a ContentControl. But when I call the control in the MainWindow, the vertical bar of the ScrollViewer does not appear, and the content is out of frame.

The Control XAML

<UserControl x:Class="UserControlMenuItem"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Core"
             xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
             mc:Ignorable="d" >
    <Grid>
        <md:PackIcon Kind="{Binding Path=Icon}" Width="15" Height="15" Margin="10 16" Foreground="{DynamicResource PrimaryHueMidForegroundBrush}"/>
        <!--<ListViewItem x:Name="ListViewItemMenu" Content="{Binding Path=Header}" Padding="37 14" FontSize="15" Foreground="{DynamicResource PrimaryHueMidForegroundBrush}"/>-->
        <Expander x:Name="ExpanderMenu" Header="{Binding Path=Header}" IsExpanded="False" Width="210" HorizontalAlignment="Right" Background="{x:Null}" Foreground="{DynamicResource PrimaryHueMidForegroundBrush}">
            <ContentControl Content="{Binding ListView}"/>
        </Expander>
    </Grid>
</UserControl>

The UserControl C# code

    public partial class UserControlMenuItem : UserControl
    {
        //MainWindow _context;
        public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register("Header", typeof(string), typeof(UserControlMenuItem));
        public string Header
        {
            get
            {
                return (string)GetValue(HeaderProperty);
            }
            set
            {
                SetValue(HeaderProperty, value);
            }
        }

        public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(PackIconKind), typeof(UserControlMenuItem));
        public PackIconKind Icon
        {
            get
            {
                return (PackIconKind)GetValue(IconProperty);
            }
            set
            {
                SetValue(IconProperty, value);
            }
        }
        public static readonly DependencyProperty ListViewProperty = DependencyProperty.Register("ListView", typeof(ListView), typeof(UserControlMenuItem), new UIPropertyMetadata(null));
        public ListView ListView
        {
            get
            {
                return (ListView)GetValue(ListViewProperty);
            }
            set
            {
                SetValue(ListViewProperty, value);
            }
        }
        public UserControlMenuItem()
        {
            InitializeComponent();
            DataContext = this;
        }

    }

Calling the UserControl inside the ScrollViewer

                    <ScrollViewer HorizontalAlignment="Stretch" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                        <StackPanel Orientation="Vertical">                            
                            <core:UserControlMenuItem x:Name="MenuItemHome" Header="Home" Icon="Home">
                                <core:UserControlMenuItem.ListView>
                                    <ListView Margin="0 16 0 16" SelectedIndex="0" PreviewMouseLeftButtonUp="ListBox_PreviewMouseLeftButtonUp">
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Home.Views.Home}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Home" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Palette.Views.PaletteSelector}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Palette" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                    </ListView>
                                </core:UserControlMenuItem.ListView>
                            </core:UserControlMenuItem>
                            <core:UserControlMenuItem Header="Data" Icon="ViewList">
                                <core:UserControlMenuItem.ListView>
                                    <ListView Margin="0 16 0 16" PreviewMouseLeftButtonUp="ListBox_PreviewMouseLeftButtonUp">
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:DataGrid.Views.DataGridView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="DataGrid" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:DataGrid.Views.MultiColumnComboBoxView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Multi-Column ComboBox" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:CollectionControl.Views.CollectionControlView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="CollectionControl" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:CheckLists.Views.CheckListsView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Check List" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:PropertyGrid.Views.PropertyGridSelectedObjectView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="PropertyGrid (Using selected object(s))" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:WatermarkComboBox.Views.WatermarkComboBoxView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="WatermarkComboBox" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:ExtTabControl.Views.ExtTabControlView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="ExtendedTabControl" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                    </ListView>
                                </core:UserControlMenuItem.ListView>
                            </core:UserControlMenuItem>
                            <core:UserControlMenuItem Header="Input Fields" Icon="Input">
                                <core:UserControlMenuItem.ListView>
                                    <ListView Margin="0 16 0 16" PreviewMouseLeftButtonUp="ListBox_PreviewMouseLeftButtonUp">
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Numeric.Views.NumericView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Numeric" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:DateTime.Views.DateTimeView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="DateTime" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:TimeSpan.Views.TimeSpanView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="TimeSpan" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Color.Views.ColorView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Color" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:FilePicker.Views.FilePickerView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="FilePicker" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:RangeSlider.Views.RangeSliderView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="RangeSlider" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:ToggleSwitch.Views.ToggleSwitchView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="ToggleSwitch" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Button.Views.ButtonSpinnerView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Enumeration" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                    </ListView>
                                </core:UserControlMenuItem.ListView>
                            </core:UserControlMenuItem>
                            <core:UserControlMenuItem Header="Text" Icon="TextBox">
                                <core:UserControlMenuItem.ListView>
                                    <ListView Margin="0 16 0 16" PreviewMouseLeftButtonUp="ListBox_PreviewMouseLeftButtonUp">
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Text.Views.AutoSelectTextboxView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="AutoSelectTextBox" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Text.Views.MaskedTextboxView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="MaskedTextBox" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Text.Views.MultiLineTextEditorView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="MultiLineTextEditor" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Text.Views.RichTextboxView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="RichTextBox" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Text.Views.WatermarkTextboxView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="WatermarkTextBox" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Text.Views.WatermarkPasswordBoxView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="WatermarkPasswordBox" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Text.Views.TokenizedTextBoxView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="TokenizedTextBox" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                    </ListView>
                                </core:UserControlMenuItem.ListView>
                            </core:UserControlMenuItem>
                            <core:UserControlMenuItem Header="Buttons" Icon="Button">
                                <core:UserControlMenuItem.ListView>
                                    <ListView Margin="0 16 0 16" PreviewMouseLeftButtonUp="ListBox_PreviewMouseLeftButtonUp">
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Button.Views.DropDownSplitButtonView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="DropDown and Split Buttons" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Button.Views.IconButtonView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="IconButton" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                    </ListView>
                                </core:UserControlMenuItem.ListView>
                            </core:UserControlMenuItem>
                            <core:UserControlMenuItem Header="Windows" Icon="DesktopWindows">
                                <core:UserControlMenuItem.ListView>
                                    <ListView Margin="0 16 0 16" PreviewMouseLeftButtonUp="ListBox_PreviewMouseLeftButtonUp">
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Window.Views.ChildWindowView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="ChildWindow" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Window.Views.WindowContainerView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="WindowContainer" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                    </ListView>
                                </core:UserControlMenuItem.ListView>
                            </core:UserControlMenuItem>
                            <core:UserControlMenuItem Header="Productivity" Icon="ChartBar">
                                <core:UserControlMenuItem.ListView>
                                    <ListView Margin="0 16 0 16" PreviewMouseLeftButtonUp="ListBox_PreviewMouseLeftButtonUp">
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:BusyIndicator.Views.BusyIndicatorView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="BusyIndicator" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:BusyIndicator.Views.BusyIndicatorCustomContentView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="BusyIndicator Custom Content" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:BusyIndicator.Views.BusyIndicatorCustomContentTemplateView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="BusyIndicator Custom Content Template" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Calculator.Views.CalculatorView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Calculator" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:Wizard.Views.WizardView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="Wizard" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:MultiCalendar.Views.MultiCalendarView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="MultiCalendar" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                    </ListView>
                                </core:UserControlMenuItem.ListView>
                            </core:UserControlMenuItem>
                            <core:UserControlMenuItem Header="Others" Icon="FilterList">
                                <core:UserControlMenuItem.ListView>
                                    <ListView Margin="0 16 0 16" PreviewMouseLeftButtonUp="ListBox_PreviewMouseLeftButtonUp">
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:AvalonDock.Views.AvalonDockView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="AvalonDock" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                        <core:LiveExplorerListBoxItem SampleType="{x:Type samples:SlideShow.Views.SlideShowView}" Style="{StaticResource MaterialDesignListBoxItem2}" PreviewMouseDown="LiveExplorerListBoxItem_PreviewMouseDown">
                                            <TextBlock Text="SlideShow" Margin="10 5"/>
                                        </core:LiveExplorerListBoxItem>
                                    </ListView>
                                </core:UserControlMenuItem.ListView>
                            </core:UserControlMenuItem>
                        </StackPanel>
                    </ScrollViewer>

And the implementing of LiveExplorerListBoxItem it´s a ListViewItem but the name is ListBox because earlier was a ListBoxItem.

    public class LiveExplorerListBoxItem: ListViewItem
    {
        #region Properties

        #region IsNewFeature

        public static readonly DependencyProperty IsNewFeatureProperty = DependencyProperty.Register("IsNewFeature", typeof(bool), typeof(LiveExplorerListBoxItem), new UIPropertyMetadata(false));
        public bool IsNewFeature
        {
            get
            {
                return (bool)GetValue(IsNewFeatureProperty);
            }
            set
            {
                SetValue(IsNewFeatureProperty, value);
            }
        }

        #endregion //IsNewFeature

        #region IsPlusOnlyFeature

        public static readonly DependencyProperty IsPlusOnlyFeatureProperty = DependencyProperty.Register("IsPlusOnlyFeature", typeof(bool), typeof(LiveExplorerListBoxItem), new UIPropertyMetadata(false));
        public bool IsPlusOnlyFeature
        {
            get
            {
                return (bool)GetValue(IsPlusOnlyFeatureProperty);
            }
            set
            {
                SetValue(IsPlusOnlyFeatureProperty, value);
            }
        }

        #endregion //IsPlusOnlyFeature

        #region SampleType

        public static readonly DependencyProperty SampleTypeProperty = DependencyProperty.Register("SampleType", typeof(Type), typeof(LiveExplorerListBoxItem), new UIPropertyMetadata(null));
        public Type SampleType
        {
            get
            {
                return (Type)GetValue(SampleTypeProperty);
            }
            set
            {
                SetValue(SampleTypeProperty, value);
            }
        }

        #endregion //Sample

        #endregion //Properties

        #region Methods

        protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e)
        {
            //# If the node does not have any sample associated, toggle it's expansion on single click
            if (this.SampleType == null)
            {
                this.IsSelected = !this.IsSelected;
            }
            else
            {
                this.IsSelected = true;
            }
            e.Handled = true;
        }

        #endregion
    }

Solution

  • I found it, is because I must insert the ScrollViewer inside a Grid and I have it inside a StackPanel