使用WPF的视图框中的多条多段线

本文关键字:段线 WPF 视图 使用 | 更新日期: 2023-09-27 18:21:26

我想在WPF中的Viewbox中"绘制"几个Polyline和一些TextblockLabel

由于Viewbox只允许一个Child,我试图将Polyline放在Canvas元素中,但没有成功:

XAML:

<Viewbox Stretch="Uniform">
     <Canvas Margin="10">
        <Polyline 
                        Points="{Binding Path=Points2}"
                        Stroke="Green"
                        StrokeThickness="2" >
        </Polyline>
                    <!-- other Polylines, Textblocks etc.  would go here... -->
    </Canvas>
</Viewbox>

当我使用此代码时,Polyline被正确绘制(即,我只是丢弃了Canvas):

<Viewbox Stretch="Uniform">
        <Polyline 
                        Points="{Binding Path=Points2}"
                        Stroke="Green"
                        StrokeThickness="2" >
        </Polyline>
</Viewbox>

我想把一些几何属性可视化,比如在一个非常简约的计算机几何程序中,比如geogebra。在下一个版本中,一些点应该是可移动的,但这不是必需的。

解决方案:

<Viewbox Stretch="Uniform">
     <Grid>
        <Polyline 
                        Points="{Binding Path=Points2}"
                        Stroke="Green"
                        StrokeThickness="4" >
        </Polyline>
        <Polyline 
                        Points="{Binding Path=Points2}"
                        Stroke="Yellow"
                        StrokeThickness="2" >
        </Polyline>
    </Grid>
</Viewbox>

这会将相同的多边形放在彼此的顶部,即宽绿色多段线顶部的薄黄色。

这个stackoverflow问题的答案帮助了我。

使用WPF的视图框中的多条多段线

画布并不能真正适用于这样的事情,一旦您将控件放入画布中,就会忽略所有布局。你能把多边形线放在一个网格里,然后用边距来定位它们吗?

<Viewbox Stretch="Uniform">
    <Grid  Margin="10">
        <Polyline 
                    Points="{Binding Path=Points2}"
                    Stroke="Green"
                    StrokeThickness="2" >
        </Polyline>
    </Grid>
</Viewbox>

您看不到多段线的原因是Canvas的默认HeightWidth为0。

尝试显式设置HeightWidth

<Viewbox x:Name="ViewBox" Stretch="Uniform">
    <Canvas x:Name="chartCanvas" Margin="10" Height="200" Width="300">
        <Polyline 
                Points="{Binding Path=Points2}"
                Stroke="Green"
                StrokeThickness="2">
        </Polyline>
        <!-- other Polylines, Textblocks etc.  would go here... -->
    </Canvas>
</Viewbox>