Я могу управлять, какие узлы можно выбрать в WPF TreeView?

Вам нужно использовать set_error_handler для отлова ошибок / предупреждений / уведомлений и т. Д.

Вот пример:

// PHP Errors to Exceptions.
set_error_handler(function (
          $err_severity,
          $err_msg,
          $err_file,
          $err_line,
    array $err_context
) {
    // error was suppressed with the @-operator
    if (0 === error_reporting()) {
        return false;
    }
    switch ($err_severity) {
        case E_WARNING:
            throw new Exception(
                $err_msg,
                0,
                $err_severity,
                $err_file,
                $err_line
            );
    }
});
6
задан Craig Shearer 30 October 2008 в 03:18
поделиться

2 ответа

Чтобы сделать так, необходимо было бы переопределить стиль для treeview. Идеально у Вас будет два типа treeview объектов один для Ваших узлов верхнего уровня (im принятие папок) и другой просто для детей, затем необходимо смочь определить, как каждый тип изделия в дереве ведет себя. Поэтому создайте стиль для каждого типа изделия, затем для узла папки просто изменяются, триггер для выбран, чтобы ничего не сделать.

2
ответ дан 17 December 2019 в 00:16
поделиться

Я написал в прикрепленном свойстве, что будет отменять выбор элемента древовидного просмотра, как только он будет выбран:

public class TreeViewItemHelper
{
    public static bool GetIsSelectable(TreeViewItem obj)
    {
        return (bool)obj.GetValue(IsSelectableProperty);
    }

    public static void SetIsSelectable(TreeViewItem obj, bool value)
    {
        obj.SetValue(IsSelectableProperty, value);
    }

    public static readonly DependencyProperty IsSelectableProperty =
        DependencyProperty.RegisterAttached("IsSelectable", typeof(bool), typeof(TreeViewItemHelper), new UIPropertyMetadata(true, IsSelectablePropertyChangedCallback));

    private static void IsSelectablePropertyChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs args)
    {
        TreeViewItem i = (TreeViewItem) o;
        i.Selected -= OnSelected;
        if(!GetIsSelectable(i))
        {
            i.Selected += OnSelected;
        }
    }

    private static void OnSelected(object sender, RoutedEventArgs args)
    {
        if(sender==args.Source)
        {
            TreeViewItem i = (TreeViewItem)sender;
            i.IsSelected = false;
        }
    }
}

К сожалению, вы все еще теряете старый выбор, когда вы щелкаете по невыбираемому элементу: (

0
ответ дан 17 December 2019 в 00:16
поделиться
Другие вопросы по тегам:

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