C# 在网格中插入带有ItemsControl的标签
我想将标签从ItemsControl排序到我的网格。 绑定Grid.Row和Grid.Column属性时,列和行的位置不受影响。 我做错了什么 这里是my View.xamlC# 在网格中插入带有ItemsControl的标签,c#,xaml,C#,Xaml,我想将标签从ItemsControl排序到我的网格。 绑定Grid.Row和Grid.Column属性时,列和行的位置不受影响。 我做错了什么 这里是my View.xaml <Window.Resources> <vm:MainViewModel x:Key="MainVM"/> </Window.Resources> <DockPanel DataContext="{StaticResource MainVM}">
<Window.Resources>
<vm:MainViewModel x:Key="MainVM"/>
</Window.Resources>
<DockPanel DataContext="{StaticResource MainVM}">
<Grid Width="500">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ItemsControl
ItemsSource="{Binding MachineList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" Background="Gainsboro" BorderThickness="1" Margin="2">
<Label Content="{Binding SerialNumber}"
Grid.Column="{Binding StationNumber}"
Grid.Row="{Binding LineNumber}"
Margin="0"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Background="LightBlue"
/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DockPanel>
这是我的MainViewModel.cs
public class MainViewModel: BaseViewModel
{
public ObservableCollection<Machine> MachineList { get; set; }
public MainViewModel()
{
Machine m1 = new Machine(0, "Row1 Column3", 1, 3, MachineType.SX);
Machine m2 = new Machine(0, "Row1 Column2", 1, 2, MachineType.SX);
Machine m3 = new Machine(0, "Row2 Column1", 2, 1, MachineType.SX);
MachineList = new ObservableCollection<Machine>();
MachineList.Add(m1);
MachineList.Add(m2);
MachineList.Add(m3);
}
}
public类MainViewModel:BaseViewModel
{
公共ObservableCollection机器列表{get;set;}
公共主视图模型()
{
机器m1=新机器(0,“行1列3”,1,3,MachineType.SX);
机器m2=新机器(0,“行1列2”,1,2,MachineType.SX);
机器m3=新机器(0,“行2列1”,2,1,MachineType.SX);
MachineList=新的可观测集合();
添加机械师(m1);
机械师增加(m2);
新增机械师(m3);
}
}
问题在于ItemsControl
在其自己的面板中显示项目,该面板不是网格,因此网格属性对项目的位置没有影响。正确的方法是在ItemsControl.ItemsPanel
属性中定义网格,如下所示:
<ItemsControl
ItemsSource="{Binding MachineList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" Background="Gainsboro" BorderThickness="1" Margin="2">
<Label Content="{Binding SerialNumber}"
Margin="0"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Background="LightBlue"
/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Width="500">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Row" Value="{binding ...}" />
<Setter Property="Grig.Column" Value="{binding ...}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
请参见中的ItemsPanelTemplate属性部分我理解您的意思,但是修改后的xaml仍然不起作用。现在它将所有3个标签放在一个单元格中尝试将
ItemsControl
直接放在StackPanel
中。此外,我刚刚意识到,您需要将Grid.Row
和Grid.Column
放在边框上,而不是标签上。我编辑了答案嗯。。。仍然不起作用现在是这样的:您的XAML代码编辑:将行/列放在边框上没有任何帮助。我在谷歌上搜索了更多内容,发现了问题每个边框都被内容演示器包围。为此,您需要使用ItemContainerStyle
。再次编辑。