C # GraphX выделить вершину по щелчку

#c# #wpf #graphx-net

#c# #wpf #graphx-net

Вопрос:

Я использую GraphX для .NET и я пытаюсь выделить вершину, когда пользователь нажимает на нее.

Я зарегистрировался для участия в VertexSelected мероприятии:

 public class MyGraphArea : GraphArea<Node, Edge, MiniFlowGraph>
{
    public MyGraphArea()
    {
        VertexSelected  = VertexSelected_MarkVertex;
    }

    private void VertexSelected_MarkVertex(object sender,VertexSelectedEventArgs args)
    {
        HighlightBehaviour.SetHighlighted(args.VertexControl, true);
    }
}
  

Но в пользовательском интерфейсе ничего не произошло. Поэтому я попытался добавить несколько вариантов:

В конструктор я добавил:

 EnableVisualPropsApply = true;
HighlightBehaviour.SetIsHighlightEnabled(this, true);
SetVerticesHighlight(true, GraphControlType.VertexAndEdge);
  

Я также зарегистрировался на Loaded событие и добавил этот код:

 foreach (var item in VertexList)
    HighlightBehaviour.SetIsHighlightEnabled(item.Value, true);
  

Затем я добавил строку SetVerticesHighlight(true, GraphControlType.VertexAndEdge) к VertexSelected событию, на всякий случай.

Но ничего не произошло.

Я смотрю на исходный код и больше ничего не могу найти.

Ответ №1:

Я считаю, что вам просто нужно добавить следующие строки кода:

 Graph.SetEdgesHighlight(true, GraphControlType.VertexAndEdge);
Graph.SetVerticesHighlight(true, GraphControlType.VertexAndEdge, EdgesType.All);
  

Я играл с примером WindowsFormsProject и добавил эти строки непосредственно перед оператором return метода Form1.GenerateWpfVisuals() . Мне не нужно было подписываться на какое-либо событие. Однако стандартное поведение будет выделять вершины и ребра при наведении курсора мыши, а не при щелчке мыши.

Gold Цвет по умолчанию, используемый для выделения, определен в template.xaml :

 <!-- VERTEX CONTROL -->
...
    <Style.Triggers>
        <Trigger Property="controls:HighlightBehaviour.Highlighted" Value="True">
            <Setter Property="Background" Value="Gold"/>
            <Setter Property="BorderThickness" Value="7"/>
        </Trigger>
    </Style.Triggers>
  

 <!-- EDGE CONTROL -->
...
    <Style.Triggers>
        <Trigger Property="controls:HighlightBehaviour.Highlighted" Value="True">
            <Setter Property="Foreground" Value="Gold"/>
            <Setter Property="StrokeThickness" Value="5"/>
        </Trigger>
    </Style.Triggers>