WPF ItemsControl与边距坐标

时间:2019-01-28 07:55:40

标签: wpf itemscontrol

所以我有一个很大的网格,可以在其中处理带有边距的坐标。  现在,我有了一个带有图标(图像)的列表,应该在特定的坐标处显示。
我将ItemsControl与带有图像的DataTemplate一起使用来显示它们。

我的问题是,如果我生成第一个图像,它就在正确的位置,但是如果我现在生成下一个图像,它将在正确的X坐标上显示,但是每次在第一个和下一个图像之间都有一个空格。

所以我的问题是:如何显示图像列表,该列表在运行时会变大,并且在较大的Grid元素中具有边距坐标? (而且我不希望有列等。)

代码以便更好地理解:

<Grid Width="4045" Height="2823">
    <ItemsControl Width="4045" Height="2823" ItemsSource="{Binding AllPoI, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" VerticalAlignment="Top" >
        <ItemsControl.ItemTemplate>
            <DataTemplate DataType="{x:Type poi:PointOfInterest}">
                <Image Margin="{Binding MarginCoordinates}" Height="16" Width="16" HorizontalAlignment="Left" VerticalAlignment="Top" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid>

尝试Clemens的评论(这很完美,这是Answere):

<Grid Width="4045" Height="2823">
    <ItemsControl Width="4045" Height="2823" ItemsSource="{Binding AllPoI, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" VerticalAlignment="Top" >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemContainerStyle>
            <Style TargetType="ContentPresenter">
                <Setter Property="Canvas.Left" Value="{Binding PosX}"/>
                <Setter Property="Canvas.Top" Value="{Binding PosY}"/>
            </Style>
        </ItemsControl.ItemContainerStyle>    
        <ItemsControl.ItemTemplate>
            <DataTemplate DataType="{x:Type poi:PointOfInterest}">
                <Image Height="16" Width="16"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    //This Canvas below gets the same coordinates as the newest Entry on my List. this Canvas is displayed on the correct Position, the list entry not.
    <Canvas Height="{Binding Gridsize, UpdateSourceTrigger=PropertyChanged}" Width="{Binding Gridsize, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Margin="{Binding GridSelectorPosition}" VerticalAlignment="Top"  Visibility="{Binding GridSelectorVisibility, Converter={StaticResource VisibleWhenBoolIsTrueConverter}}">
        <Rectangle Stroke="Red" Fill="Red" Opacity=".3" Width="{Binding Gridsize, UpdateSourceTrigger=PropertyChanged}" Height="{Binding Gridsize, UpdateSourceTrigger=PropertyChanged}"/>
    </Canvas>
</Grid>

0 个答案:

没有答案