GraphSharp Vertex Double Click Событие
Я использую graphSharp в своем приложении winforms. Однако я добавил Node Double click Event для вершины, но проблема в том, как мне получить значение нажатой вершины.
Код:
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
1 ответ
Я сделал это так (извините за код 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
}
}