Comment activer/désactiver menuitem (contextmenu) pour un selecteditem de treeview
J'ai besoin d'utiliser un contrôle treeview en application WPF
Je créer des listes de données (de type DataItem) et l'affecter à contrôle treeview.
Créer un hierarchicaldatatemplate et de l'attribuer à contrôle treeview
Ajouter un contextmenu à treeview,
Maintenant, je veux activer ou désactiver l'élément de menu par une propriété SelectedItem (il doit être DataItem, je pense), "IsEnabled"
La façon de l'aborder?
<HierarchicalDataTemplate x:Key="dt" ItemsSource="{Binding Items}">
<TextBlock x:Uid="TextBlock_2" Text="{Binding Name}">
</TextBlock>
</HierarchicalDataTemplate>
<TreeView x:Name="tree_3" Height="200"
ItemTemplate="{StaticResource dt}"
>
<TreeView.ContextMenu>
<ContextMenu>
<MenuItem ItemsSource="{Binding SelectedItem}"
Header="doA" IsEnabled="{Binding IsEnabled, Mode=OneWay}" />
<MenuItem Header="doB" IsEnabled="False"/>
<MenuItem Header="doC" />
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
class DataItem : DependencyObject //INotifyPropertyChanged
{
private List<DataItem> _items = new List<DataItem>();
public List<DataItem> Items
{
get
{
return _items;
}
}
public string Name { get; set; }
public int Category { get; set; }
public bool IsEnabled { get; set; }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
List<DataItem> allData = new List<DataItem>();
DataItem i1 = new DataItem() { Name = "Test1", Category = 1, IsEnabled = false };
DataItem i2 = new DataItem() { Name = "Test2", Category = 2, IsEnabled = false };
DataItem i3 = new DataItem() { Name = "Test3", Category = 3, IsEnabled = true };
DataItem t1 = new DataItem() { Name = "Template 1", Category = 1, IsEnabled = true };
DataItem t2 = new DataItem() { Name = "Template 2", Category = 1, IsEnabled = false };
i1.Items.Add(t1);
i1.Items.Add(t2);
allData.Add(i1);
allData.Add(i2);
allData.Add(i3);
tree_3.ItemsSource = allData;
}
J'ai résolu le problème par la méthode suivante.
-
créer un menu de contexte de ressources
<ContextMenu x:Uid="ContextMenu_1" x:Key="TreeViewItemContextMenu" ItemsSource="{Binding}"> <MenuItem x:Uid="MenuItem_1" Header="Rename" IsEnabled="{Binding Path=., Converter={StaticResource renameMenuConverter}}" Click="RenameMenu_OnClick" /> </ContextMenu>
-
créer un style pour l'affichage de l'arborescence de l'élément et en utilisant le menu contextuel de ressources ci-dessus
<Style TargetType="{x:Type TreeViewItem}" x:Uid="Style_1"> <Setter x:Uid="Setter_32" Property="ContextMenu" Value="{StaticResource TreeViewItemContextMenu}"> </Setter> ... </Style>
-
mettre en œuvre un convertisseur. Selon l'extension de balisage ci-dessus, le parmeter passé en convertir est le courant de l'élément sélectionné, afin que je puisse obtenir la propriété de et en faire la vérification.
merci pour votre aide.
OriginalL'auteur Orionpax | 2012-05-22
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé cette en WinForm TreeView avec des résultats positifs.
Lors de la déclaration de la DataItems également inclure une balise de propriété.
Sur l'EventListener pour le TreeView, fonte d'expéditeur, de l'objet ou d'obtenir le SelectedItem à partir de l'Arborescence.
De même pour l'objet expéditeur,
Comme pour le "code pour l'exécution", vous pouvez activer ou désactiver les MenuItems.
REMARQUE: Vous n'avez pas déclaré la x:Nom de l'attribut de l'MenuItems dans le ContextMenu Tag.
Faites-le pour accéder à la MenuItems.
IsEnabled est la propriété de l'activation ou de la désactivation de la interactable éléments dans WPF
J'ai juste donné l'algorithme parce que, je suis de plus en plus de VB gars que C#. DONC, je ne veux pas gâcher avec les codes.
Une bonne journée 🙂
OriginalL'auteur The Black Sandal