gpt4 book ai didi

c# - 在 XAML 中绑定(bind)多边形点

转载 作者:行者123 更新时间:2023-11-30 14:55:44 25 4
gpt4 key购买 nike

有没有办法在XAML中绑定(bind)点结构坐标?例如,我想创建一个三角形,其点数取决于控件的宽度和高度。

<Polygon>
<Polygon.Points>
<Point X="{Binding ElementName=control, Path=ActualWidth}" Y="{Binding ElementName=control, Path=ActualHeight}"/>
</Polygon.Points>
</Polygon>

错误:

A 'Binding' cannot be set on the 'X' property of type 'Point'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

我不能使用继承,因为 Point 类型是一个结构体。我尝试创建 PointCollection 属性绑定(bind),但效果不佳。

最佳答案

给你

我尝试用两种方法解决三角形

结果

result


View 框方法

如果您有兴趣呈现控件大小的三角形,那么这可能是您的选择

<Grid>
<Viewbox Stretch="Fill">
<Path Data="M 1.5,0 L 3,3 0,3 Z"
Width="3" Height="3"
Fill="Gray" />
</Viewbox>
</Grid>

上述方法将渲染一个三角形,并通过 Viewbox 调整父控件的大小,此外,您可以向路径添加一个旋转变换,并根据需要旋转三角形。

如果无论如何你只需要一个三角形,推荐使用这种方法


使用转换器的多边形

<Grid xmlns:l="clr-namespace:CSharpWPF"
x:Name="control">
<Grid.Resources>
<l:ElementToTrianglePointsConverter x:Key="ElementToTrianglePointsConverter" />
</Grid.Resources>
<Polygon Points="{Binding ElementName=control, Converter={StaticResource ElementToTrianglePointsConverter}}"
FillRule="Nonzero"
Fill="Gray" />
</Grid>

转换器

namespace CSharpWPF
{
public class ElementToTrianglePointsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
FrameworkElement element = value as FrameworkElement;
PointCollection points = new PointCollection();
Action fillPoints = () =>
{
points.Clear();
points.Add(new Point(element.ActualWidth / 2, 0));
points.Add(new Point(element.ActualWidth, element.ActualHeight));
points.Add(new Point(0, element.ActualHeight));
};
fillPoints();
element.SizeChanged += (s, ee) => fillPoints();
return points;// store;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

上面的方法是小马车,我总是必须重新调整窗口大小才能看到三角形。默认情况下,我可以在设计时看到它,但在运行时看不到它,除非我调整窗口大小。尽管多边形中有点但未渲染,但不确定为什么?需要调查这个问题

关于c# - 在 XAML 中绑定(bind)多边形点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24770186/

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