gpt4 book ai didi

具有居中和剪切功能的 WPF 图像主机

转载 作者:行者123 更新时间:2023-12-04 20:34:31 26 4
gpt4 key购买 nike

我觉得我可能需要一些转换器,但这是我想做的。我想要一个具有以下参数的图像控件(因为它位于绑定(bind)到真实数据的数据模板中)。

  • 以 90x90 的空间为中心(没有任何形式的拉伸(stretch))。
  • 有一个半径为 40 像素(水平和垂直)的圆形剪裁。
  • 如果图像 > 90x90,它应该在 90x90 空间内居中,并从中间剪裁一个 40x40 的圆圈。
  • 如果图像 < 90x90,它应该在 90x90 空间内居中。由于整个图像都包含在剪辑区域内,因此剪辑圆应该没有效果。

  • 我在下面有我的 XAML 代码。这适用于正好为 90x90 的图片(即它们不拉伸(stretch),它们使图像居中并且剪辑工作)。对于 > 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>

    最佳答案

    我最终不得不从图像样式中删除宽度和高度属性。使用 WPF Snoop 查看它,图像现在比包含的 Grid 大,但由于 Grid 具有固定大小,因此它以它为中心。

    <Style x:Key="ImageStyle">
    <Setter Property="Stretch" Value="None" />
    <Setter Property="HorizontalAlignment" Value="Center" />
    <Setter Property="VerticalAlignment" Value="Center" />
    </Style>

    <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>

    关于具有居中和剪切功能的 WPF 图像主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21767956/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com