Измените контекстное меню в WPF TreeView для данных

@Adam: Вы изменяете версию файла с каждой сборкой? Вы используете управление версиями (SYN или VSS) и используете ту информацию для соединения источника назад с двоичными файлами?

, Кажется, имеет смысл, что версия блока остается такой же. т.е. "2.0.0.0". Это соответствует развертыванию продукта.

версия файла изменяется для соответствия пересмотру от управления исходным кодом. "2.0.??. пересмотр" Это предоставило бы ссылку от определенного dll (или exe) к источнику, который создал его.

9
задан Dave Clemmer 29 August 2011 в 15:52
поделиться

1 ответ

Это пример для ListBox, я думаю, вы можете легко изменить его для работы с TreeView.

XAML:

...

<Window.Resources>
    <ContextMenu x:Key="FileContextMenu">
        ...
    </ContextMenu>
    <ContextMenu x:Key="DirContextMenu">
        ...
    </ContextMenu>

    <local:ItemToContextMenuConverter x:Key="ContextMenuConverter" />        
</Window.Resources>

...

<ListBox x:Name="SomeList">
    <ListBox.ItemTemplate>
        <DataTemplate>                          
            <Label Content="{Binding Path=Name}" ContextMenu="{Binding Converter={StaticResource ContextMenuConverter}}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Код:

class Item
{
    public string Name { get; set; }
    public bool IsFile { get; set; }
}

[ValueConversion(typeof(Item), typeof(ContextMenu))]
public class ItemToContextMenuConverter : IValueConverter
{
    public static ContextMenu FileContextMenu;
    public static ContextMenu DirContextMenu;

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Item item = value as Item;
        if (item == null) return null;

        return item.IsFile ? FileContextMenu : DirContextMenu;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        ItemToContextMenuConverter.FileContextMenu 
            = this.Resources["FileContextMenu"] as ContextMenu;
        ItemToContextMenuConverter.DirContextMenu 
            = this.Resources["DirContextMenu"] as ContextMenu;

        List<Item> items = new List<Item>();
        items.Add(new Item() { Name = "First", IsFile = true });
        items.Add(new Item() { Name = "Second", IsFile = false });

        SomeList.ItemsSource = items;
    }
13
ответ дан 4 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

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