Выберите Узел TreeView при щелчке правой кнопкой прежде, чем отобразить ContextMenu

Поскольку вы устанавливаете Tensorflow через pip, зависимости пакета (в данном случае numpy, scipy, h5py и т. Д.) Не будут установлены. Могут быть некоторые конфликты с версиями определенного пакета.

  • Для pip вы можете попробовать удалить все и установить обратно.

  • Альтернативой является Конда в анаконде. Conda установит все необходимые пакеты сразу, без необходимости их индивидуальной установки.

    Конда установить тензор потока

94
задан SwDevMan81 26 November 2018 в 15:12
поделиться

4 ответа

В зависимости от пути дерево было заполнено, отправитель и e. Исходные значения могут варьироваться .

Одно из возможных решений состоит в том, чтобы использовать e. OriginalSource и находят TreeViewItem с помощью VisualTreeHelper:

private void OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    TreeViewItem treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject);

    if (treeViewItem != null)
    {
        treeViewItem.Focus();
        e.Handled = true;
    }
}

static TreeViewItem VisualUpwardSearch(DependencyObject source)
{
    while (source != null && !(source is TreeViewItem))
        source = VisualTreeHelper.GetParent(source);

    return source as TreeViewItem;
}
127
ответ дан Community 24 November 2019 в 06:04
поделиться

В XAML добавьте обработчик PreviewMouseRightButtonDown в XAML:

    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}">
            <!-- We have to select the item which is right-clicked on -->
            <EventSetter Event="TreeViewItem.PreviewMouseRightButtonDown" Handler="TreeViewItem_PreviewMouseRightButtonDown"/>
        </Style>
    </TreeView.ItemContainerStyle>

Тогда обрабатывают событие как это:

    private void TreeViewItem_PreviewMouseRightButtonDown( object sender, MouseEventArgs e )
    {
        TreeViewItem item = sender as TreeViewItem;
        if ( item != null )
        {
            item.Focus( );
            e.Handled = true;
        }
    }
11
ответ дан Stefan 24 November 2019 в 06:04
поделиться

Если Вы хотите остаться в шаблоне MVVM, Вы могли бы сделать следующее:

Представление:

<TreeView x:Name="trvName" ItemsSource="{Binding RootElementListView}" Tag="{Binding ClickedTreeElement, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type models:YourTreeElementClass}" ItemsSource="{Binding Path=Subreports}">
            <TextBlock Text="{Binding YourTreeElementDisplayProperty}" PreviewMouseRightButtonDown="TreeView_PreviewMouseRightButtonDown"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Код Позади:

private void TreeView_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
    if (sender is TextBlock tb && tb.DataContext is YourTreeElementClass te)
    {
        trvName.Tag = te;
    }
}

ViewModel:

private YourTreeElementClass _clickedTreeElement;

public YourTreeElementClass ClickedTreeElement
{
    get => _clickedTreeElement;
    set => SetProperty(ref _clickedTreeElement, value);
}

Теперь Вы могли или реагировать на изменение свойства ClickedTreeElement, или Вы могли использовать команду, которая внутренне работает с ClickedTreeElement.

Расширенное Представление:

<UserControl ...
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
    <TreeView x:Name="trvName" ItemsSource="{Binding RootElementListView}" Tag="{Binding ClickedTreeElement, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseRightButtonUp">
                <i:InvokeCommandAction Command="{Binding HandleRightClickCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type models:YourTreeElementClass}" ItemsSource="{Binding Path=Subreports}">
                <TextBlock Text="{Binding YourTreeElementDisplayProperty}" PreviewMouseRightButtonDown="TreeView_PreviewMouseRightButtonDown"/>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
</UserControl>
0
ответ дан 24 November 2019 в 06:04
поделиться

] Используя "item.Focus ();" похоже, не работает на 100%, используя "item.IsSelected = true;" делает.

16
ответ дан 24 November 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: