Connecting ScatterViewItems with a line

白昼怎懂夜的黑 提交于 2019-12-24 16:37:36

问题


I want to draw lines between ScatterViewItems but it doesn't work with what I already found here. There is a Line, but not connected to the center of the ellipses. Does anybody see my mistake? Here is what I have:

 <Grid>
    <s:ScatterView>
        <s:ScatterViewItem Height="250" Width="500" Background="Transparent" Orientation="0" HorizontalAlignment="Right" Margin="0,70,-764,-70" d:LayoutOverrides="HorizontalAlignment, Width">
            <s:ScatterView Height="250" Width="500" Background="BlueViolet">
                <s:ScatterViewItem Background="Transparent" Center="100,145" Orientation="0">
                    <Label Content="Knoten A" Background="WhiteSmoke" Foreground="Black"/>
                </s:ScatterViewItem>
                <s:ScatterViewItem x:Name="StartItem" CanMove="False" CanRotate="False" Margin="0" Center="10,125" Background="Transparent">
                    <Ellipse Width="10" Height="10" Fill="Transparent" Stroke="Black" Margin="0,0,0,0"/>
                </s:ScatterViewItem>
                <s:ScatterViewItem x:Name="EndItem" CanMove="False" CanRotate="False" Margin="0" Center="490,125" Background="Transparent">
                    <Ellipse Width="10" Height="10" Fill="Transparent" Stroke="Black" Margin="0,0,0,0"/>
                </s:ScatterViewItem>
                <s:ScatterViewItem Background="Transparent">
                    <Canvas Name="LineHost"/>
                </s:ScatterViewItem>
            </s:ScatterView>
        </s:ScatterViewItem>
    </s:ScatterView>
</Grid>

And the c#

 Line line = new Line { Stroke = Brushes.Black, StrokeThickness = 2.0 };
        BindLineToScatterViewItems(line, StartItem, EndItem);
        LineHost.Children.Add(line);

private void BindLineToScatterViewItems(Line line, ScatterViewItem StartItem, ScatterViewItem EndItem)
    {
        BindingOperations.SetBinding(line, Line.X1Property,
                                     new Binding {Source = StartItem, Path = new PropertyPath("ActualCenter.X")});
        BindingOperations.SetBinding(line, Line.Y1Property,
                                     new Binding { Source = StartItem, Path = new PropertyPath("ActualCenter.Y") });

        BindingOperations.SetBinding(line, Line.X2Property,
                                    new Binding { Source = EndItem, Path = new PropertyPath("ActualCenter.X") });
        BindingOperations.SetBinding(line, Line.Y2Property,
                                     new Binding { Source = EndItem, Path = new PropertyPath("ActualCenter.Y") });
    }


回答1:


The startpoint AND endpoint from your lines is ActualCenter.X/ActualCenter.Y of your Startitem. If the ActualCenter of your Startitem is 10/100, you would draw a line from 10/100 to 10/100, which is a reason why youre not seeing any line. Instead of setting Source = Startitem in the last two lines of your BindLineToScatterViewItems method, try setting Source = EndItem.

Hope this helps.




回答2:


If I use Canvas instead of ScatterView and ScatterViewItem and the order ist like this

 <s:ScatterView>
        <Canvas Name="LineCanvas2" Width="500" Height="250" Background="Aquamarine">
            <Canvas Background="Transparent" Name="LineCanvas"/>
            <s:ScatterView Width="500" Height="250" Background="Transparent">
                <s:ScatterViewItem ...

there is no problem with the positioning of the connection lines.



来源:https://stackoverflow.com/questions/13566293/connecting-scatterviewitems-with-a-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!