Как пометить файл при щелчке правой кнопкой мыши по файлу из списка - PullRequest
0 голосов
/ 04 марта 2012

У меня есть список с файлами, когда я щелкаю правой кнопкой мыши по файлам в списке, я хочу, чтобы файл был помечен, как я могу это сделать?

<Window x:Class="myTool.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="myTool" AllowsTransparency="False" Icon="/myTool;component/Images/Organize.ico" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="594" Width="512" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize" >

        <ListBox Height="95" HorizontalAlignment="Left" Margin="78,35,0,0" Name="listBoxFiles" VerticalAlignment="Top" Width="323" Grid.ColumnSpan="2" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Visible" SelectionMode="Multiple" PreviewMouseRightButtonDown="listBoxFiles_PreviewMouseRightButtonDown" >
            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">

                    <EventSetter Event="MouseDoubleClick" Handler="ListBoxItem_DoubleClick" />
                </Style>
            </ListBox.ItemContainerStyle>
            <ListBox.ContextMenu>
                <ContextMenu>
                    <MenuItem Header="Delete" PreviewMouseDown="MenuItem_PreviewMouseDown" Click="MenuItemDelete_Click"></MenuItem>
                </ContextMenu>
            </ListBox.ContextMenu>
        </ListBox>

1 Ответ

1 голос
/ 04 марта 2012

Поведение ListBoxItem может быть расширено путем реализации пользовательского присоединенного поведения: добавьте аспект выбора правой кнопки.Дополнительная информация о прикрепленном поведении: Введение в присоединенное поведение в WPF .

public static class ListBoxItemBehavior
{
    #region IsEnabled

    public static bool GetIsEnabled(ListBoxItem listBoxItem)
    {
        return (bool)listBoxItem.GetValue(IsEnabledProperty);
    }

    public static void SetIsEnabled(ListBoxItem listBoxItem, bool value)
    {
        listBoxItem.SetValue(IsEnabledProperty, value);
    }

    public static readonly DependencyProperty IsEnabledProperty =
        DependencyProperty.RegisterAttached(
        "IsEnabled",
        typeof(bool),
        typeof(ListBoxItemBehavior),
        new UIPropertyMetadata(false, OnIsEnabledChanged));

    static void OnIsEnabledChanged(
      DependencyObject depObj, DependencyPropertyChangedEventArgs e)
    {
        ListBoxItem item = depObj as ListBoxItem;
        if (item == null)
            return;

        if (e.NewValue is bool == false)
            return;

        if ((bool)e.NewValue)
            item.MouseRightButtonDown += ItemOnMouseRightButtonDown;
        else
            item.MouseRightButtonDown -= ItemOnMouseRightButtonDown;
    }

    private static void ItemOnMouseRightButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs)
    {
        ListBoxItem item = mouseButtonEventArgs.OriginalSource as ListBoxItem;
        if (item != null)
        {
            item.IsSelected = !item.IsSelected;
        }
    }

    #endregion
}

Использование (XAML): присоединенное поведение должно применяться для ListBoxItem с ListBox.

Пожалуйста, замените BEHAVIOR_NAMESPACE на полное имя пространства имен, в котором определен класс ListBoxItemBehavior.

<Window ...
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Behaviors="clr-namespace:BEHAVIOR_NAMESPACE">
    <ListBox ...
             SelectionMode="Multiple">
      <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
          <Setter Property="Behaviors:ListBoxItemBehavior.IsEnabled" Value="True" />
        </Style>
      </ListBox.ItemContainerStyle>
    </ListBox>

</Window>

Надеюсь, это поможет.

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