Пример контекстного меню Xceed PropertyGrid AdvancedOptionsMenu

Я пытаюсь отобразить контекстное меню «Копировать» при нажатии на значок дополнительных параметров любого свойства. Что мне нужно добавить, чтобы заставить его работать?

<xctk:PropertyGrid
        x:Name="PropertyGrid"  
        Grid.Column="1" Margin="8"
        ShowSummary="False"    
        AutoGenerateProperties="True" 
        HideInheritedProperties="False"
        SelectedObject="{Binding InspectedObject}"
        SelectedObjectName="{Binding InspectedObject, Converter={StaticResource PropertyGridPropertyNameConverter}}"
        SelectedObjectTypeName="{Binding InspectedObject, Converter={StaticResource PropertyGridPropertyTypeConverter}}"
        SelectedObjectChanged="PropertyGrid_OnSelectedObjectChanged"
        ShowAdvancedOptions="True"

    >
    <xctk:PropertyGrid.AdvancedOptionsMenu >
        <ContextMenu>
            <MenuItem Header="Copy" Click="MenuItem_OnClick"></MenuItem>
        </ContextMenu>
    </xctk:PropertyGrid.AdvancedOptionsMenu>
</xctk:PropertyGrid>

Я бы хотел, чтобы элемент контекста «Копировать» отображался и щелкал мышью независимо от того, доступно ли свойство только для чтения.


person jchristof    schedule 23.06.2017    source источник
comment
Вы нашли ответ на это? Вы можете поделиться? Спасибо :)   -  person IgorMF    schedule 16.07.2017
comment
Нет, извините, я еще не обратился к этому - я откладывал необходимость обойти это, либо сделав свойства доступными для записи, либо создав пользовательские элементы управления, которые позволили бы копировать (у меня много свойств)   -  person jchristof    schedule 17.07.2017
comment
@IgorMF Я разветвил исходное репо и добавил пункт меню копировать значение в AdvancedOptionsMenu. Проверьте это: github.com/kmatyaszek/wpftoolkit   -  person kmatyaszek    schedule 24.08.2018


Ответы (1)


В обработчике событий Click MenuItem вы можете получить доступ к данным свойства по свойству DataContext в объекте-отправителе.

private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
    MenuItem menuItem = sender as MenuItem;
    if (menuItem != null && menuItem.DataContext is PropertyItem)
    {
        Clipboard.SetData(DataFormats.Text, ((PropertyItem)menuItem.DataContext).Value);
    }
}

По следующей ссылке вы можете найти дополнительную информацию по этой теме: https://kmatyaszek.github.io/2018/08/22/extended-wpftoolkit-propertygrid-copybutton.html

Я заметил, что это решение работает, когда вы щелкаете (левой кнопкой мыши) по значку AdvancedOptionsMenu, возникает проблема с щелчком правой кнопкой мыши по элементу свойства. Чтобы решить эту проблему, я разветвил исходное репо и добавил пункт меню копировать значение в AdvancedOptionsMenu. Проверьте это: https://github.com/kmatyaszek/wpftoolkit/commit/2ebf84cab19bdbdb01f5350e434319c8dc7fa524

person kmatyaszek    schedule 22.08.2018
comment
@ Gaspa79 Я изменил движок блога. Прочтите этот пост на следующем сайте: kmatyaszek.github .io/2018/08/22/ - person kmatyaszek; 03.09.2020