Попробуйте использовать Row
вместо Column
Row(children: [
Expanded(
child: TextField(
decoration: InputDecoration(hintText: "TextField 1"),
),
),
SizedBox(
width: 20,
),
Expanded(
child: TextField(
decoration: InputDecoration(hintText: "TextField 2"),
),
)
])
Больше информации здесь: https://medium.com/flutter-community/breaking-layouts-in-rows-and- колонки-в-трепетания-8ea1ce4c1316
Не управляйте деревом компонента. Вместо этого управляйте моделью, которая представляет дерево компонента. Затем имейте свое представление, связывают с различными наборами и свойствами в той модели для создания ее зрительного ряда.
То, что следует, является действительно упрощенным примером. Это просто показывает понятия - не берите его в качестве показательного из того, как необходимо учесть код.
Во-первых, моя модель:
public abstract class Shape
{
public double Left { get; set; }
public double Top { get; set; }
}
public class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
}
Затем, я выставляю набор упомянутых форм (Вы использовали бы другую модель для содержания этого набора). Затем я связываю с ним, по моему мнению:
<Window x:Name="_root" x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<DataTemplate DataType="{x:Type local:Rectangle}">
<Rectangle Width="{Binding Width}" Height="{Binding Height}" Stroke="Black"/>
</DataTemplate>
</Window.Resources>
<ItemsControl DataContext="{Binding ElementName=_root}" ItemsSource="{Binding Shapes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Window>
Фундаментальная проблема в Вашем вопросе путает требования Ваших пользователей (управляющий объектами, которые представлены прямоугольниками и замещающими знаками (я только предполагаю)) с деталями реализации (добавление Rectangle
s и Ellipse
s к Canvas
es).
Снова, различные обязанности в шаблоне MVVM:
Переведите ViewModel в пиксели и переведите входные события в вызовы метода на ViewModel.
Это было бы фактическими компонентами Silverlight (Rectangle
, Ellipse
, Canvas
) привязка против их DataContext
и наличие нескольких очень маленьких обработчиков событий или Command
s или что бы то ни было.
Держите данные и бизнес-логику проблемно-ориентированным способом.
Это представляет "математические" прямоугольники и замещающие знаки, которые тянут Ваши пользователи.
Совершенствуйте Модель в ориентированном на UI и часто особенном методе примера использования.
Здесь Вы храните переходную информацию как "в настоящее время выбранный объект", которые важны для определенного представления, но не являются атрибутами понятия базовой Модели.
Прочитайте мой блог для больше на моих представлениях о MVVM.