0
votes

I am trying to add a scroll viewer to stackpanels - "gradpaneldesc" , "undergrapaneldesc" and "certficatedesc" which are inside another parent stackpanel- "mainpanel" respectively, but I am unable to achieve this as its showing me scrollviewer perhaps but there is no actual scrollbar,not realizing where is the mistake. Any help will be highly appreciated.

XAML

<UserControl x:Class="ISTE.Views.CoursesView"XAML
             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:ISTE.Views"
             mc:Ignorable="d" 
             d:DesignHeight="600" d:DesignWidth="1300">
    <Grid>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="400"/>
            <ColumnDefinition Width="400"/>
            <ColumnDefinition Width="400"/>
        </Grid.ColumnDefinitions>
        <Image Source="/Images/degree.jpg"
                         Stretch="Fill"
                         Height="250"

                Grid.ColumnSpan="3"/>

        <StackPanel x:Name="mainpanel1" Grid.Column="0">
            <Button x:Name="Graduate" IsDefault="True" Click="Graduate_Click"   >
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                        <GradientStop Color="#FF235DF0" Offset="0"/>
                        <GradientStop Color="#FFE7EBF5" Offset="1"/>
                        <GradientStop Color="#FF9EB6F3" Offset="0.632"/>
                    </LinearGradientBrush>
                </Button.Background> Graduate
            </Button>
            <StackPanel x:Name="gradpanel" Height="200px"></StackPanel>
            <Border x:Name="myBorder2">
                <ScrollViewer>
                    <StackPanel x:Name="gradpaneldesc" Height="200px"></StackPanel>
                    </ScrollViewer>
            </Border>


        </StackPanel>
        <StackPanel x:Name="mainpanel2" Grid.Column="1">
            <Button x:Name="UnderGraduate" IsDefault="True" Click="UnderGraduate_Click"   >
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                        <GradientStop Color="#FF235DF0" Offset="0"/>
                        <GradientStop Color="#FFE7EBF5" Offset="1"/>
                        <GradientStop Color="#FF9EB6F3" Offset="0.632"/>
                    </LinearGradientBrush>
                </Button.Background> Undergraduate</Button>
            <StackPanel x:Name="undergradpanel" Height="200px"></StackPanel>
            <Border  x:Name="myBorder1">
                <ScrollViewer>
                    <StackPanel x:Name="undergradpaneldesc" Height="200px"></StackPanel>
                    </ScrollViewer>
            </Border>

        </StackPanel>
        <StackPanel Grid.Column="2">
            <Button x:Name="Certifications" IsDefault="True"  Click="Certifications_Click"    >
                <Button.Background>
                    <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
                        <GradientStop Color="#FF235DF0" Offset="0"/>
                        <GradientStop Color="#FFE7EBF5" Offset="1"/>
                        <GradientStop Color="#FF9EB6F3" Offset="0.632"/>
                    </LinearGradientBrush>
                </Button.Background> Certifications</Button>
            <StackPanel x:Name="certpanel" Height="200px"></StackPanel>
            <Border  x:Name="myBorder3">
                <ScrollViewer>
                    <StackPanel x:Name="certificatedesc" Height="200px"></StackPanel>
                    </ScrollViewer>
            </Border>

        </StackPanel>

    </Grid>

CS

using ISTE.Models;
using ISTE.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;


namespace ISTE.Views
{
    /// <summary>
    /// Interaction logic for CoursesView.xaml
    /// </summary>
    public partial class CoursesView : UserControl
    {
        CoursesVM vm;
        public CoursesView()
        {
            InitializeComponent();
            vm = new CoursesVM();
            this.DataContext = vm;

            vm.GetData();
        }
        bool flag=false;
        bool flag1=false;
        private void UnderGraduate_Click(object sender1, RoutedEventArgs e1)
        {
            if (flag1 == false)
            {
                foreach (Undergraduate grad in vm.ItemData.undergraduate)
                {
                    var textb = new Button();

                    undergradpanel.Children.Add(textb);
                    textb.Content = grad.degreeName;
                    textb.Click += new RoutedEventHandler(ugdegreeEventHandler);
                    Console.WriteLine("graddegrees \t" + grad.degreeName);
                }
            }
            flag1 = true;
        }
        void ugdegreeEventHandler(object sender2, RoutedEventArgs e2)
        {
            // Console.WriteLine("hi select");
            var b = sender2 as Button;
            //  var textb2 = new TextBlock();
            //  textb2.Text

                 myBorder1.Background = Brushes.SkyBlue;
                 myBorder1.BorderBrush = Brushes.Blue;
                 myBorder1.BorderThickness = new Thickness(2);
                 myBorder1.CornerRadius = new CornerRadius(8);
                 myBorder1.Padding = new Thickness(6);


            var degreeselected = b.Content.ToString();

            if (undergradpaneldesc.Children.Count < 1)
            {


                var textb2 = new TextBlock();
                            textb2.Name = "textblock";

                undergradpaneldesc.Children.Add(textb2);

                foreach (Undergraduate grad in vm.ItemData.undergraduate)
                {
                    if (grad.degreeName == degreeselected)
                    {
                        textb2.TextDecorations = TextDecorations.Underline;
                        textb2.Text = grad.description+"\n\n";

                        textb2.TextWrapping = TextWrapping.Wrap;
                        return;
                    }
                }


            }
            else
            {

                foreach (Undergraduate grad in vm.ItemData.undergraduate)
                {
                    if (grad.degreeName == degreeselected)
                    {

                        foreach (TextBlock ch in undergradpaneldesc.Children)
                        {
                            ch.Text = "";
                            ch.TextDecorations = TextDecorations.Underline;
                            ch.Text = grad.description+"\n\n";
                            ch.TextWrapping = TextWrapping.Wrap;
                            return;
                        }
                    }
                }
            }



        }
        private void Graduate_Click(object sender, RoutedEventArgs e)
        {

            if (flag == false)
            {
                foreach (Graduate grad in vm.ItemData.graduate)
                {


                        var textb = new Button();
                        gradpanel.Children.Add(textb);
                        textb.Content = grad.degreeName;
                        textb.IsDefault = true;
                        textb.Click += new RoutedEventHandler(degreeEventHandler);

                        Console.WriteLine("graddegrees \t" + grad.degreeName);

                }
            }
            flag = true;
        }

        void degreeEventHandler(object sender, RoutedEventArgs e)
        {
            // Console.WriteLine("hi select");
            var b = sender as Button;
            //  var textb2 = new TextBlock();
            //  textb2.Text

            var degreeselected = b.Content.ToString();

                myBorder2.Background = Brushes.SkyBlue;
                myBorder2.BorderBrush = Brushes.Black;
                myBorder2.BorderThickness = new Thickness(2);

                myBorder2.CornerRadius = new CornerRadius(8);
                myBorder2.Padding = new Thickness(6);


            if (gradpaneldesc.Children.Count<1)
            {


                var textb1 = new TextBlock();
                textb1.Name = "textblock1";

                gradpaneldesc.Children.Add(textb1);

                foreach (Graduate grad in vm.ItemData.graduate)
                {
                    if (grad.degreeName == degreeselected)
                    {
                        if (grad.degreeName != "graduate advanced certificates")
                        {
                            textb1.Text = grad.description;
                            textb1.TextDecorations = TextDecorations.Underline;
                            foreach (var conc in grad.concentrations)
                            {
                                textb1.Text += conc + "\n\n";
                            }

                            textb1.TextWrapping = TextWrapping.Wrap;
                            return;
                        }
                        else
                        {

                            textb1.TextDecorations = TextDecorations.Underline;
                            foreach (var conc in grad.availableCertificates)
                            {
                                textb1.Text += conc + "\n\n";
                            }

                            textb1.TextWrapping = TextWrapping.Wrap;
                            return;
                        }
                    }
                }


            }
            else
            {

                foreach (Graduate grad in vm.ItemData.graduate)
                {
                    if (grad.degreeName == degreeselected)
                    {
                        if (grad.degreeName != "graduate advanced certificates")
                        {
                            foreach (TextBlock ch in gradpaneldesc.Children)
                            {
                                ch.Text = "";
                                ch.Text = grad.description + "\n\n";
                                ch.TextDecorations = TextDecorations.Underline;
                                foreach (var conc in grad.concentrations)
                                {
                                    ch.Text += conc + "\n";
                                }

                                ch.TextWrapping = TextWrapping.Wrap;
                                return;
                            }
                        }
                        else
                        {
                            foreach (TextBlock ch in gradpaneldesc.Children)
                            {
                                ch.Text = "";

                                ch.TextDecorations = TextDecorations.Underline;
                                foreach (var conc in grad.availableCertificates)
                                {
                                    ch.Text += conc + "\n";
                                }

                                ch.TextWrapping = TextWrapping.Wrap;
                                return;
                            }
                        }
                    }
                }
            }



        }

        private void Certifications_Click(object sender, RoutedEventArgs e)
        {
            var textb3 = new TextBlock();
            textb3.Name = "textblock3";

            certificatedesc.Children.Add(textb3);

            textb3.TextDecorations = TextDecorations.Underline;
            myBorder3.Background = Brushes.SkyBlue;
            myBorder3.BorderBrush = Brushes.Black;
            myBorder3.BorderThickness = new Thickness(2);

            myBorder3.CornerRadius = new CornerRadius(8);
            myBorder3.Padding = new Thickness(6);
            foreach (Graduate grad in vm.ItemData.graduate)
            {

                if (grad.degreeName == "graduate advanced certificates")
                {
                    textb3.Text = grad.description;
                    textb3.TextDecorations = TextDecorations.Underline;
                    foreach (var conc in grad.availableCertificates)
                    {
                        textb3.Text += conc + "\n\n";
                    }

                    textb3.TextWrapping = TextWrapping.Wrap;
                    return;
                }

            }
        }
    }
}
1

1 Answers

1
votes

You need to specify the height of the ScrollViewer not the StackPanel, because otherwise the StackPanel won't extend beyond the bounds of the ScrollViewer and the scroll bar won't display.

<Border x:Name="myBorder2">
    <ScrollViewer Height="200px">
        <StackPanel x:Name="gradpaneldesc">
        </StackPanel>
    </ScrollViewer>
</Border>