我有一个 ListView,它的 ItemsPanelTemplate 是一个 Canvas,每个项目都是一个矩形。
我试图在 Canvas 外的 (-50,-50) 位置绘制一个矩形,没有连续的。我可以这样做吗?

XAML:

<Grid >
    <ListView BorderThickness="0" BorderBrush="Transparent" ItemsSource="{Binding Rectangles}" Height="200" Width="200">
        <ListView.Resources>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="Canvas.Left" Value="{Binding Left, Mode=TwoWay}" />
                <Setter Property="Canvas.Top"  Value="{Binding Top, Mode=TwoWay}" />
            </Style>
        </ListView.Resources>
        <ListView.ItemTemplate>
            <DataTemplate DataType="{x:Type WpfApplication2:RectangleModel}">
                <Rectangle Width="30" Height="30"  Canvas.Left="{Binding Left}" Canvas.Right="{Binding Right}" Fill="LightCoral"
                           ClipToBounds="False"/>
            </DataTemplate>
        </ListView.ItemTemplate>

        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas Background="LightBlue"/>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>
</Grid>

后面的代码:
 public partial class MainWindow : Window
{
    public List<RectangleModel> Rectangles { get; set; }

    public MainWindow()
    {
        Rectangles = new List<RectangleModel>();
        Rectangles.Add(new RectangleModel { Left = -50, Top = -50 });
        Rectangles.Add(new RectangleModel { Left = 0, Top = 0 });
        Rectangles.Add(new RectangleModel { Left = 50, Top = 50 });
        DataContext = this;
        InitializeComponent();
    }
}

最佳答案

我可能错了,但这似乎是一个相当简单的问题(我可能完全假设错了,但我不确定所以我会假设以防万一)。

您已将 ListView 定义为 200 x 200,而您的 Canvas 占用了所有空间。从你的图片来看,我觉得你想要的 Canvas 是 200 x 200 而不是 ListView

Xaml:

<Grid >
        <ListView BorderThickness="0" BorderBrush="Transparent" ItemsSource="{Binding Rectangles}">
            <ListView.Resources>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="Canvas.Left" Value="{Binding Left, Mode=TwoWay}" />
                    <Setter Property="Canvas.Top"  Value="{Binding Top, Mode=TwoWay}" />
                </Style>
            </ListView.Resources>
            <ListView.ItemTemplate>
                <DataTemplate DataType="{x:Type wpfApplication1:RectangleModel}">
                    <Rectangle Width="30" Height="10"  Canvas.Left="{Binding Left}" Canvas.Top="{Binding Top}" Fill="LightCoral"
                           ClipToBounds="False"/>
                </DataTemplate>
            </ListView.ItemTemplate>

            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <Canvas Background="LightBlue" ClipToBounds="False" Height="200" Width="200"/>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>
    </Grid>

结果:

10-07 19:21
查看更多