8
votes

Désactiver la sélection WPF TreeView (ou TreeViewItem)?

y a-t-il un bon moyen (sauf retablissant l'ensemble de l'ensemble arbresviewem.template ) pour désactiver la sélection dans arbiew ?

Je suis essentiellement à la recherche du style itemsControl du TreeView (un itemsControl est la meilleure utilisation pour "désactiver" la sélection sur Listbox , lisez Ceci Post)


1 commentaires

8 Réponses :


1
votes

J'ai décidé d'écrire un comportement réutilisable, HTH:

<Window xmlns:components="clr-namespace:WpfApplication.Components">
  <TreeView>
    <TreeView.ItemContainerStyle>
      <Style TargetType="TreeViewItem">
        <Setter 
          Property="components:TreeViewBehavior.IsTransparent" 
          Value="True" />
      </Style>
    </TreeView.ItemContainerStyle>
  </TreeView>
</Window> 


0 commentaires

1
votes

Chaque fois qu'un élément est sélectionné, vous pourriez "désélectionner". Ex. Modifiez le code de http://www.codeproject.com/kb/wpf/treeview_selectionwpf.aspx ou utilisez une approche MVVM (voir http://www.codeproject.com/ KB / WPF / TreeViewWithViewModel.aspx ) et toujours défini sur False.


1 commentaires

Bien que cela puisse théoriquement répondre à la question, nous aimerions que vous incluiez les parties essentielles de l'article lié dans votre réponse et fournissez le lien Référence . Omettre de faire cela laisse la réponse en danger de la pourriture de liens.



0
votes

Je l'ai fait une différence que la réponse acceptée:

permet de dire que vous avez une propriété dans votre viewModel (dites «Dites». Maintenant, lorsquePReventsElection est vrai, vous voulez que la sélection soit désactivée:

dans votre arbreview incendie L'événement sélectionné comme suit: xxx

puis dans le codeBeHind Vous pouvez Ce qui suit: xxx


2 commentaires

Il ne semble pas y avoir d'événement aperçu sur le WPF TreeView .


HMM J'utilisais Telerik's Radtreeview et je suppose que j'ai supposé que l'événement Aperviewselecté était disponible dans un arbre régulier.



5
votes

Basé sur les liens vers la réponse actuellement acceptée, j'ai mis en place ceci dans mon projet:

protected bool _DisableSelection;
private bool _IsSelected;
public bool IsSelected
{
    get { return _IsSelected; }
    set
    {
        if (value == _IsSelected) return;
        _IsSelected = _DisableSelection ? false : value;
        NotifyPropertyChanged();
    }
}


0 commentaires

22
votes

Essayez ceci:

<Trigger Property="HasItems" Value="true">
   <Setter Property="Focusable" Value="false" />
</Trigger>


3 commentaires

Pour étendre cette réponse, le réglage de la falsification sur False On Leaf TreeViewSItems semble également empêcher d'être sélectionné.


Cela empêche également les nœuds sans que les enfants soient sélectionnés, considérez cela.


Malheureusement, lors de l'effondrement d'un nœud, cela peut toujours entraîner la sélection de la racine



1
votes

Je viens de désélectionner les visualisations des arbres tels qu'ils sont sélectionnés. J'utilise arboresview une seule fois. Cependant, si je l'ai ajouté à plusieurs endroits, j'envisagerais de regarder cela à l'ajouter à un comportement attaché.

xaml: p> xxx pré>

code derrière: p>

private void TreeView_SelectionChanged(object sender, RoutedEventArgs e)
{
    if (!(sender is TreeView myTreeView)) return;
    var selectedItem = (TreeViewItem)myTreeView.SelectedItem;
    if (selectedItem == null) return;
    selectedItem.IsSelected = false;
}


0 commentaires

4
votes

Ceci a fait le tour pour moi (basé sur Cette Réponse, mais aucune naissance à l'élément - la sélection est désactivée. :

<TreeView>
  <TreeView.ItemContainerStyle>
    <Style TargetType="TreeViewItem">
      <Setter Property="Focusable" Value="False" />
    </Style>
  </TreeView.ItemContainerStyle>
</TreeView>


0 commentaires

1
votes

J'ai essayé cela et ça a fonctionné pour moi. Parce que j'ai une taxe simple et non dynamique. Mais je pense que cela peut fonctionner en le mettant dans un style xxx


3 commentaires

Tandis que cet extrait de code peut être la solution, y compris un L'explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.


Merci @neoanderson. Je suis nouveau ici, mais je veux juste aider.


Nous voulons tous aider. L'objectif est de le faire aussi efficace que possible. Merci d'avoir expliqué l'extrait de code.