уровень treeview в WPF?

Существует команда выбора , если вы хотите использовать командную строку:

echo off
choice /M "You have been idle for more than 10 minutes. Shutdown"
if %ERRORLEVEL% equ 1 (shutdown /S /F /T 60)
if %ERRORLEVEL% equ 2 (echo no was selected)

ERRORLEVEL начинается с 1. Так из примеров, когда вы выполняете choice /? :

choice /C YNC /M "Press Y for Yes, N for No or C for Cancel."

«Y» равно 1, «N» равно 2 и т. Д.

В Powershell все проще, но у вас будет сообщение «по умолчанию»:

Stop-Computer -Confirm

12
задан buræquete 1 June 2017 в 05:39
поделиться

2 ответа

Прямой ответ на Ваш вопрос - то, что нет никакого свойства уровня в WPF.

Нет никого к отношениям между средствами управления winforms и управлением wpf. Поскольку базовая архитектура и использование полностью отличаются в обоих. В WPF Вы свяжете иерархические данные (вид LinkedList Datastructure) к TreeView и определите HeirarchicalDataTemplate к Treeview. Свойство ItemTemplate

8
ответ дан 2 December 2019 в 20:41
поделиться

Учитывая вопрос:-

таким образом, когда я нажимаю узел, как я знаю, какой уровень это? есть ли обходное решение?

Вот возможное обходное решение:-

Если у Вас есть ссылка на Управление в Визуальном Дереве, возможно от a Click событие затем, которое можно использовать то управление для разработки, какой уровень это находится в структурном виде путем вызывания функции как это, которое я использовал в прошлом.

private int FindTreeLevel(DependencyObject control)
{
  var level = -1;
  if (control != null)
  {
    var parent = VisualTreeHelper.GetParent(control);
    while (!(parent is TreeView) && (parent != null))
    {
      if (parent is TreeViewItem)
        level++;
      parent = VisualTreeHelper.GetParent(parent);
    }
  }
  return level;
}

Этот метод будет идти по VisualTree и рассчитывать сколько TreeViewItem средства управления, которые это находит прежде, чем остановиться, когда это находит TreeView Управление.

Если Вам нужно это доступное в XAML, например, a DataTrigger из a HierarchicalDataTemplate затем Вы могли упаковать это в к a IValueConverter класс

<Window.Resources>
  <local:TreeLevelConverter x:Key="treeLevelConverter"/>

  <HierarchicalDataTemplate DataType="{x:Type local:MyType}" >
  ...
     <Grid ... >
         <TextBlock x:Name="MyControl" ... />
     ...
     </Grid>
     <HierarchicalDataTemplate.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource treeLevelConverter}}" Value="0" >
              <Setter TargetName="MyControl" Property="Background" Value="Red"/>
        </DataTrigger>
    </HierarchicalDataTemplate.Triggers>
  </HierarchicalDataTemplate>
</Window.Resources>

Затем используйте следующий Преобразователь

  public class TreeLevelConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
      var level = -1;
      if (value is DependencyObject )
      {
        var parent = VisualTreeHelper.GetParent(value as DependencyObject );
        while (!(parent is TreeView) && (parent != null))
        {
          if (parent is TreeViewItem) 
            level++;
          parent = VisualTreeHelper.GetParent(parent);
        }
      }
      return level;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
      throw new System.NotImplementedException();
    }
  }
7
ответ дан 2 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

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