我觉得我可能需要一些转换器,但这是我想做的。我想要一个具有以下参数的图像控件(因为它位于绑定到真实数据的数据模板中)。
- 以 90x90 的空间为中心(没有任何形式的拉伸)。
- 有一个半径为 40 像素(水平和垂直)的圆形剪裁。
- 如果图像 > 90x90,它应该在 90x90 空间内居中,并从中间剪裁一个 40x40 的圆圈。
- 如果图像 < 90x90,它应该在 90x90 空间内居中。由于整个图像都包含在剪辑区域内,因此剪辑圈应该没有效果。
我在下面有我的 XAML 代码。这适用于正好为 90x90 的图片(即它们不拉伸,它们使图像居中并且剪辑工作)。对于 > 90x90 的图像,剪裁工作正常,但图像未居中。对于 < 90x90 的图像,图像居中,但剪裁似乎将图像放置在图像内容的左上角区域,因此剪裁会剪裁图像的左上角部分。
<Style x:Key="ImageStyle">
<Setter Property="Width" Value="90" />
<Setter Property="Height" Value="90" />
<Setter Property="Stretch" Value="None" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Clip">
<Setter.Value>
<EllipseGeometry Center="45,45" RadiusX="40" RadiusY="40" />
</Setter.Value>
</Setter>
</Style>
<Grid>
<!-- Other Stuff -->
<Image Source="{Binding ImagePath}" Style="{StaticResource ImageStyle}" />
</Grid>
我可以通过包裹在 Grid 中并将剪辑移动到那里来摆脱第二个问题(小图像剪辑),但大的东西不会居中:
<Grid>
<!-- Other Stuff -->
<Grid Width="90" Height="90">
<Grid.Clip>
<EllipseGeometry Center="45,45" RadiusX="40" RadiusY="40" />
</Grid.Clip>
<Image Source="{Binding ImagePath}" Style="{StaticResource ImageStyle}" />
</Grid>
</Grid>