在 WPF Datagrid 行中仅显示图像的一部分?

Show only a section of an image in WPF Datagrid rows?

我有尺寸为 200x275 的图像(在本地驱动器上),我使用以下代码在数据网格中填充一行:

XAML : DataGrid.Columns

<DataGridTemplateColumn Header="IMG" Width="SizeToCells">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Image Width="200" Height="275" Margin="0,0,0,-100" Source="{Binding Path=IMG}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

在我的 xaml.cs 文件中,我将 IMG 作为 BitmapImage 类型的 属性(将 uri 存储为 BitmapImage)并使用 CollectionViewSource 对其进行更改更新到其中包含这些图像的列。

显示它们很好,但我只想显示每个图像的一部分作为一种预览(同样宽度为 200px,距离顶部 10px,高度只有 50px - 稍后我会有完整的单击它的小预览时显示图像)。

从上面的代码中您可以看到我尝试更改边距值(-100 到底部)- 这有点管用,但列表中的最后一张图像完整显示并超出了底部列表。

有没有更好的方法从顶部裁剪 10px,然后将高度设置为 50px,而不缩小图像?

我能想到的唯一方法是从位图图像创建一个新的位图,但我敢肯定,如果有数百张图像,那将是非常低效的。

我会尝试将您的图像控件包装在 ClipToBounds=true 的网格中。那应该解决它。只需确保网格的大小适合 item(50 像素高),而不是根据图像自动调整大小,否则剪裁将无法如您所愿。