0

我在我的winforms应用程序中使用graphSharp但是我在顶点上添加了节点双击事件,但问题是我如何获得点击顶点的值。

代码 :

    Private Sub VertexControl_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs)
                     ' Dim a As String
        'a = GraphCanvas.GetX(Me).ToString
      Msg(a)
    End Sub

    Public Event VertexSelected As VertexSelectedEventHandler

    Public Overridable Sub OnVertexSelected(ByVal vc As VertexControl)
        RaiseEvent VertexSelected(Me, New VertexSelectedEventArgs(vc))
    End Sub
End Class

Public Class TaggedGraphLayout
    Inherits GraphLayout(Of Object, TaggedEdge(Of Object, Object), IBidirectionalGraph(Of Object, TaggedEdge(Of Object, Object)))
End Class

Public Delegate Sub VertexSelectedEventHandler(ByVal sender As Object, ByVal args As VertexSelectedEventArgs)

Public Class VertexSelectedEventArgs
    Inherits System.EventArgs
    Public Property VertexControl() As VertexControl

    Public Sub New(ByVal vc As VertexControl)
        MyBase.New()
        VertexControl = vc
    End Sub
End Class
4

1 回答 1

0

我是这样做的(对不起 C# 代码)

在我的 XAML 中,我在包含所有节点数据的堆栈面板上定义了处理程序:

<DataTemplate x:Key="componentTemplate" DataType="{x:Type graph:ComponentVertex}">
  <StackPanel Orientation="Horizontal" Margin="5" MouseDown="UIElement_OnMouseDown">
    <TextBlock x:Name="IdBlock" Text="{Binding Path=ID, Mode=OneWay}" Foreground="White"/>
  </StackPanel>
</DataTemplate>

和事件处理程序:

    private void UIElement_OnMouseDown(object sender, MouseButtonEventArgs e)
    {
        // Check for double-click only
        if (e.ClickCount >= 2)
        {
            // The DataContext is my custom vertex
            var vm = (ComponentVertex)((StackPanel)sender).DataContext;
            MessageBox.Show(vm.ID);
            e.Handled = true; // Avoid further graph handling
        }
    }
于 2014-04-23T13:26:58.950 回答