Как создать весь объект XAML Grid в C #? - PullRequest
0 голосов
/ 06 декабря 2018

Я хотел бы создать экземпляр всего объекта XAML Grid в C #.My Grid объект - зверь, он имеет 9 полей пользовательского ввода, границы, метки и изображения.

Я также хочу пять экземпляров моего объекта Grid, и я хотел бы создать их экземпляр во время выполнения на лету (нажатием кнопки).Это возможно?Каков наилучший подход?Вот мой объект Grid ...

 <Grid Margin="2">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>

                        <Border Grid.Row="1" Grid.Column="0" Grid.RowSpan="6" Grid.ColumnSpan="8" BorderBrush="Black" BorderThickness="1" CornerRadius="5">
                            <Label Grid.Row="1" Grid.RowSpan="3" Grid.Column="0" Grid.ColumnSpan="8" Background="#505050" ></Label>
                        </Border>

                        <TextBlock Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="4" Text="TRANSFORM" TextAlignment="Center" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="8" Text="Position" VerticalAlignment="Bottom" TextAlignment="Left" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen" Margin="2"></TextBlock>
                        <TextBlock Grid.Row="1" Grid.Column="2" Grid.ColumnSpan="1" Text="x " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBlock Grid.Row="1" Grid.Column="4" Grid.ColumnSpan="1" Text="y " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBlock Grid.Row="1" Grid.Column="6" Grid.ColumnSpan="1" Text="z " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBox x:Name ="transform_x" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2" ></TextBox>
                        <TextBox x:Name ="transform_y" Grid.Row="1" Grid.Column="5" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2" ></TextBox>
                        <TextBox x:Name ="transform_z" Grid.Row="1" Grid.Column="7" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2" ></TextBox>

                        <TextBlock Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="8" Text="Rotation"  VerticalAlignment="Bottom"  TextAlignment="Left" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen" Margin="2"></TextBlock>
                        <TextBlock Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="1" Text="x " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBlock Grid.Row="2" Grid.Column="4" Grid.ColumnSpan="1" Text="y " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBlock Grid.Row="2" Grid.Column="6" Grid.ColumnSpan="1" Text="z " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBox x:Name ="rotation_x" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2"></TextBox>
                        <TextBox x:Name ="rotation_y" Grid.Row="2" Grid.Column="5" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2"></TextBox>
                        <TextBox x:Name ="rotation_z" Grid.Row="2" Grid.Column="7" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2"></TextBox>

                        <TextBlock Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="8" Text="Scale" VerticalAlignment="Bottom" TextAlignment="Left" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen" Margin="2"></TextBlock>
                        <TextBlock Grid.Row="3" Grid.Column="2" Grid.ColumnSpan="1" Text="x " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBlock Grid.Row="3" Grid.Column="4" Grid.ColumnSpan="1" Text="y " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBlock Grid.Row="3" Grid.Column="6" Grid.ColumnSpan="1" Text="z " VerticalAlignment="Bottom" TextAlignment="Right" FontSize="10" Foreground="#FD3777" FontFamily="./resources/#Pilsen"></TextBlock>
                        <TextBox x:Name ="scale_x" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2"></TextBox>
                        <TextBox x:Name ="scale_y" Grid.Row="3" Grid.Column="5" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2"></TextBox>
                        <TextBox x:Name ="scale_z" Grid.Row="3" Grid.Column="7" Grid.ColumnSpan="1" TextAlignment="Center" VerticalAlignment="Bottom" FontSize="10" Background="#707070" Foreground="Black" FontFamily="./resources/#Pilsen" Margin="2"></TextBox>

                    </Grid>

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вы можете сделать следующее:

  • создать UserControl, содержащий вашу сетку, скажем, MyBeastGrid
  • в форме назначения содержит заполнитель, где должны быть созданы эти экземпляры сетокпоместите, скажем, MyPlaceholder
  • добавить кнопку (или другой механизм запуска, который должен добавить MyBeastGrid к MyPlaceholder)
  • в обработчике события Click кнопки, который вы просто вызываете MyPlaceholder.Children.Add(new MyBeastGrid());

Если вам нужно передать некоторые параметры в MyBeastGrid, определите некоторые общедоступные свойства там и либо предоставьте параметризованный конструктор, либо вызовите вашу сетку с new MyBeastGrid() { Property1 = value1, Property2 = value2 };

Я предлагаю вамиспользуйте ScrollViewer для хранения ваших MyBeastGrid экземпляров, поскольку это обеспечивает прокрутку из коробки.

0 голосов
/ 07 декабря 2018

Просто добавьте новую сетку в код

Grid grid = new Grid() { Margin = new Thickness(2) };

и добавьте к ней элементы, например.

grid.Children.Add(new Border());
TextBlock t = new TextBlock();
t.SetValue(Grid.RowProperty, 0);
t.SetValue(Grid.ColumnProperty, 2);
grid.Children.Add(t);
//etc...

Или вы можете добавить элемент UserControl в свой проект и поместить свою сетку внутрьего xaml.Затем вы можете создать столько MyGridControl, сколько захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...