Скопировать контекстное меню для элемента управления ListView - PullRequest
5 голосов
/ 04 ноября 2008

Каков наилучший способ добавить функцию «копировать в буфер обмена» в элемент управления ListView в WPF?

Я пытался добавить ApplicationCommands.Copy либо в ListView ContextMenu, либо в ListViewItem ContextMenu, но команда остается отключенной.

Спасибо, Питер

Вот пример xaml одной из моих попыток ...

 <Window.Resources>
    <ContextMenu x:Key="SharedInstanceContextMenu" x:Shared="True">
        <MenuItem Header="Copy" Command="ApplicationCommands.Copy"/>            
    </ContextMenu>
 </Window.Resources>

 <ListBox Margin="12,233,225,68" Name="listBox1" >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=UpToSourceCategoryByCategoryId.Category}" ContextMenu="{DynamicResource ResourceKey=SharedInstanceContextMenu}"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
 </ListBox>

Как мне установить CommandTarget в этом случае?

Спасибо, Питер

Ответы [ 2 ]

4 голосов
/ 05 ноября 2008

Похоже, вам нужна CommandBinding.

Вот как я, вероятно, поступил бы с тем, что вы пытаетесь сделать.

<Window.CommandBindings>
    <CommandBinding
        Command="ApplicationCommands.Copy"
        Executed="CopyCommandHandler"
        CanExecute="CanCopyExecuteHandler" />
</Window.CommandBindings>

<Window.Resources>
    <ContextMenu x:Key="SharedInstanceContextMenu">
        <MenuItem Header="Copy" Command="ApplicationCommands.Copy"/>
    </ContextMenu>

    <Style x:Key="MyItemContainerStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="ContextMenu" Value="{StaticResource SharedInstanceContextMenu}" />
    </Style>
</Window.Resources>

<ListBox ItemContainerStyle="{StaticResource MyItemContainerStyle}">
    <ListBoxItem>One</ListBoxItem>
    <ListBoxItem>Two</ListBoxItem>
    <ListBoxItem>Three</ListBoxItem>
    <ListBoxItem>Four</ListBoxItem>
</ListBox>
1 голос
/ 19 марта 2009

Эту функциональность также можно реализовать с помощью присоединенного свойства, как я описал это в моем блоге . Идея состоит в том, чтобы зарегистрировать команду ApplicationCommands.Copy в ListView и, когда она будет выполнена, прочитать значения из привязок данных.

В записи блога вы также найдете загружаемый образец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...