Как я могу отменить щелчок WPF TreeView пользователя?

Вместо того, чтобы сделать prodCompany в вашем Movie классе строкой, вы должны сделать его типа Production.

Кажется, вы хотите инициализировать производственную компанию с вопросительными знаками. И тогда вы можете перезаписать название, город и штат производственной компании. Итак, ваш Movie класс должен выглядеть так:

public class Movie {

    private Production prodCompany;

    public Movie() {
        prodCompany = new Production();
    }

    public void setProdCompany(String someName, String someCity, String someState) {
        prodCompany.setCompanyName(someName);
        prodCompany.setLocationCity(someCity);
        prodCompany.setLocationState(someState);
    }
...
12
задан Community 23 May 2017 в 11:54
поделиться

4 ответа

Вместо того, чтобы выбрать для Выбрал/Отменил выбор, лучший маршрут мог бы быть должен сцепиться в PreviewMouseDown. preblem с обработкой события Selected и Unselected - то, что событие уже имело место при получении уведомления. Нет ничего для отмены, потому что это уже произошло.

С другой стороны, события Preview отменяемы. Это не точное событие, которое Вы хотите, но это действительно дает Вам oppuritunity, чтобы препятствовать тому, чтобы пользователь выбрал другой узел.

2
ответ дан 2 December 2019 в 06:27
поделиться

Вы не можете отменить событие как Вы, может, например, событие Closing. Но можно отменить его при кэшировании последнего выбранного значения. Секрет - Вы, должны изменить выбор, не повторно запуская событие SelectionChanged. Вот пример:

    private object _LastSelection = null;
    private void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (IsUpdated)
        {
            MessageBoxResult result = MessageBox.Show("The current record has been modified. Are you sure you want to navigate away? Click Cancel to continue editing. If you click OK all changes will be lost.", "Warning", MessageBoxButton.OKCancel, MessageBoxImage.Hand);
            switch (result)
            {
                case MessageBoxResult.Cancel:
                    e.Handled = true;
                    // disable event so this doesn't go into an infinite loop when the selection is changed to the cached value
                    PersonListView.SelectionChanged -= new SelectionChangedEventHandler(OnSelectionChanged);
                    PersonListView.SelectedItem = _LastSelection;
                    PersonListView.SelectionChanged += new SelectionChangedEventHandler(OnSelectionChanged);
                    return;
                case MessageBoxResult.OK:
                    // revert the object to the original state
                    LocalDataContext.Persons.GetOriginalEntityState(_LastSelection).CopyTo(_LastSelection);
                    IsUpdated = false;
                    Refresh();
                    break;
                default:
                    throw new ApplicationException("Invalid response.");
            }
        }

        // cache the selected item for undo
        _LastSelection = PersonListView.SelectedItem;
    }
2
ответ дан 2 December 2019 в 06:27
поделиться

Начиная с SelectedItemChanged событие инициировано после SelectedItem уже изменился, Вы не можете действительно отменить событие в этой точке.

То, что можно сделать, прислушиваются к щелчкам мышью и отменяют их перед SelectedItem изменяется.

1
ответ дан 2 December 2019 в 06:27
поделиться

CAMS_ARIES:

XAML:

код:

  private bool ManejarSeleccionNodoArbol(Object origen)
    {
        return true;  // with true, the selected nodo don't change
        return false // with false, the selected nodo change
    }


    private void Arbol_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {            
        if (e.Source is TreeViewItem)
        {
            e.Handled = ManejarSeleccionNodoArbol(e.Source);
        }
    }

    private void Arbol_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Source is TreeViewItem)
        {
           e.Handled=ManejarSeleccionNodoArbol(e.Source);
        }
    }         
2
ответ дан 2 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

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