将Ellipse放在同一视图中的一条线的边缘上

时间:2017-08-15 17:40:52

标签: c# wpf xaml

要么它非常简单,我还没有找到解决方案,否则我很快就会疯狂。

我只想在Line上的ItemsControl中绘制CanvasLine两边应该有Ellipse。像这样:

enter image description here

我的ItemsControl看起来像这样:

        <ItemsControl ItemsSource="{Binding Connections}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.Resources>
            <DataTemplate DataType="{x:Type systemEnvironmentViewModels:SystemEnvironmentConnectionViewModel}">
                <systemEnvironment:ConnectionView/>
            </DataTemplate>
            <Style TargetType="ContentPresenter"> <!-- this does only make it worse -->
                <Setter Property="Canvas.Left" Value="{Binding Connection.FirstElementCoordinate.X}"/>
                <Setter Property="Canvas.Top" Value="{Binding Connection.FirstElementCoordinate.Y}"/>
            </Style>
        </ItemsControl.Resources>
    </ItemsControl>

用作DataTemplate的视图:

<Grid>
    <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Ellipse x:Name="DependencyEllipse" Width="10" Height="10" Fill="Black" Grid.Column="0"/>
    <Line X1="{Binding Connection.FirstElementCoordinate.X}" X2="{Binding Connection.SecondElementCoordinate.X}"
          Y1="{Binding Connection.FirstElementCoordinate.Y}" Y2="{Binding Connection.SecondElementCoordinate.Y}"
          Stroke="Black" StrokeThickness="5" x:Name="ConnectionLine" Grid.Column="1"/>
    <Ellipse x:Name="SecondDependencyEllipse" Width="10" Height="10" Fill="Black" Grid.Column="2"/>
</Grid>

结果确实看起来不像我想要的,我知道使用带有列的Grid可能不起作用,但它是我能想到的最接近允许按我想要的方式拆分元素。

同样Style的{​​{1}}似乎也是错误的,因为如果没有它,我的线会像我想要的那样被绘制,但ContentPresenter是错误的

我应该为Ellipse选择另一个ItemsControl吗? 非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

不要使用Ellipse,也不要在Grid列中放置元素。

而是使用具有EllipseGeometries的Path元素。以下示例假定FirstElementCoordinate和SecondElementCoordinate属性的类型为new SqlParameter("@p0", formatableString.GetArgument(0))。如果不是这种情况,请使用适当的Binding Converter。

System.Windows.Point