Создание прокручиваемого грида

WPF
  1. неделю назад

    Здравствуйте.

    Хочу сделать прокручиваемый грид т.е. при запуске программы пользователю предлагается панель управления к примеру из 6 кнопок, тогда в гриде 7 колонок 1 колонка для панели управления остальные для неких данных, каждая колонка равна ширине окна программы. Нужно что бы пользователь нажал, к примеру, на вторую кнопку грид прокрытился до 3 колонки. И ко всему прочему нужно чтобы колонки и кнопки добавлялись динамически. Попытался сделать но пока не очень выходит.

    Вот XAML

    <Window x:Class="VersatileUtility.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:VersatileUtility"
            mc:Ignorable="d"
            Title="MainWindow" Height="360" Width="525" Name="frmMain">
        <Window.Resources>        
            <Style TargetType="Button">
                <Setter Property="Control.Width" Value="150"/>
                <Setter Property="Control.Height" Value="150"/>
                <Setter Property="Control.Margin" Value="10"/>
            </Style>
        </Window.Resources>
           <Grid>
            <Grid Name="GridRibbon">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <WrapPanel Grid.Column="0" x:Name="ControlPanel">                
                </WrapPanel>                        
            </Grid>
        </Grid>
    </Window>

    вот C#

    for (int i = 0; i < countButton; i++)
                {
                    //добавляем кнопки на панель управления
                    Button btn = new Button
                    {
                        Name = "btn" + (i + 1),
                        Tag = i + 1,
                        Content = i + 1
                    };
    
                    btn.Click += Button_Click;
    
                    ControlPanel.Children.Add(btn);
                    
                    //добавляем колонки по количеству кнопок
                    ColumnDefinition col = new ColumnDefinition();
                    Binding bindWidth = new Binding()
                    {
                        Source = this,
                        Path = new PropertyPath("Width")
                    };                
    
                    col.SetBinding(ColumnDefinition.WidthProperty, bindWidth);
    
                    GridRibbon.ColumnDefinitions.Add(col);
    
                    Button btnCol = new Button
                    {
                        Name = "btn" + (i + 1),
                        Tag = i + 1,
                        Content = i + 1
                    };
    
                    GridRibbon.Children.Add(btnCol);
                    Grid.SetColumn(btnCol, i + 1);                
                } 

    В результате этого кода я вообще не вижу панели управления, а только колонку которую я делал динамически. Может кто-нибудь подскажет как правильно реализовать данную задачу?

или зарегистрируйтесь чтобы ответить