40

リストビュー コントロールのダブルクリック イベントを参照するには、どうすればよいですか?

4

16 に答える 16

64
<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <EventSetter Event="MouseDoubleClick" Handler="listViewItem_MouseDoubleClick" />
    </Style>
</ListView.ItemContainerStyle>

唯一の難しさは、基礎となるオブジェクトに関心がある場合、listviewitemが次のようにマップされることです。

private void listViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    ListViewItem item = sender as ListViewItem;
    object obj = item.Content;
}
于 2009-11-23T19:02:34.030 に答える
37

私はこのようなものを使用して、ListViewItemのダブルクリックでのみトリガーし、たとえばListViewのヘッダーをダブルクリックしたときはトリガーしません。

private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DependencyObject obj = (DependencyObject)e.OriginalSource;

    while (obj != null && obj != myListView)
    {
        if (obj.GetType() == typeof(ListViewItem))
        {
            // Do something here
            MessageBox.Show("A ListViewItem was double clicked!");

            break;
        }
        obj = VisualTreeHelper.GetParent(obj);
    }
}
于 2009-05-30T15:38:37.417 に答える
10

ListView.HitTestメソッドを使用する

    private void listView_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        var senderList  = (ListView) sender;
        var clickedItem = senderList.HitTest(e.Location).Item;
        if (clickedItem != null)
        {
            //do something
        }            
    }

それとも旧道

    private void listView_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        var senderList  = (ListView) sender;                        
        if (senderList.SelectedItems.Count == 1 && IsInBound(e.Location, senderList.SelectedItems[0].Bounds))
        {
            //Do something
        }
    }

    public  bool IsInBound(Point location, Rectangle bound)
    {
        return (bound.Y <= location.Y && 
                bound.Y + bound.Height >= location.Y &&
                bound.X <= location.X && 
                bound.X + bound.Width >= location.X);
    }
于 2015-03-11T17:28:23.947 に答える
8
    private void positionsListView_DoubleClick(object sender, EventArgs e)
    {
        if (positionsListView.SelectedItems.Count == 1)
        {
            ListView.SelectedListViewItemCollection items = positionsListView.SelectedItems;

            ListViewItem lvItem = items[0];
            string what = lvItem.Text;

        }
    }
于 2012-06-15T06:53:36.917 に答える
5

最も役立つコメントを追加するのに十分な評価スコアはまだありませんが、これは .Net 4.5 ソリューションについて尋ねている人に関連しています。

マウスの X 座標と Y 座標、および ListView メソッド GetItemAt を使用して、クリックされたアイテムを見つけることができます。

private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    ListViewItem item = myListView.GetItemAt(e.X, e.Y)
    // Do something here
}
于 2016-12-08T09:14:04.417 に答える
5

私もそれが必要でした。私はmsdnでそれを見つけました:

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.activation.aspx

このデリゲートはそのためだと思います。

于 2010-01-30T23:36:36.273 に答える
1

これは Microsoft Dev Center で見つけました。正しく機能し、間違った場所でのダブルクリックを無視します。ご覧のとおり、ポイントは、ダブルクリック イベントがトリガーされる前にアイテムが選択されることです。

private void listView1_DoubleClick(object sender, EventArgs e)
{
    // user clicked an item of listview control
    if (listView1.SelectedItems.Count == 1)
    {
        //do what you need to do here            
    }
}

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/588b1053-8a8f-44ab-8b44-2e42062fb663

于 2012-06-11T17:26:23.060 に答える
0

MouseDoubleClick イベントを使用するか、すべての MouseClick イベントの eventargs 変数 'e' にクリック カウントがあります。したがって、e.ClickCount == 2 の場合、ダブルクリックされたことになります。

于 2009-05-30T07:22:37.113 に答える
0

SelectedItem をコンテキストとして使用してウィンドウ (別のビュー) を開きたい ListBox で同様の問題が発生していました (私の場合は、編集できます)。

私が見つけた 3 つのオプションは次のとおりです。

3番目のオプションを使用しましたが、次のようになります。

<ListBox x:Name="You_Need_This_Name"  
ItemsSource="{Binding Your_Collection_Name_Here}"
SelectedItem="{Binding Your_Property_Name_Here, UpdateSourceTrigger=PropertyChanged}"
... rest of your needed stuff here ...
>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
    <Command:EventToCommand Command="{Binding Your_Command_Name_Here}" 
        CommandParameter="{Binding ElementName=You_Need_This_Name,Path=SelectedItem}"     />
    </i:EventTrigger>
</i:Interaction.Triggers>

それだけです...必要なアイテムをダブルクリックすると、ViewModelのメソッドがSelectedItemをパラメーターとして呼び出され、そこでやりたいことが何でもできます:)

于 2013-10-08T09:03:56.397 に答える
0

面倒ですが、これを行う最善の方法は次のようなものです。

<DataTemplate Name="MyCoolDataTemplate">
    <Grid Loaded="HookLVIClicked" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}">
        <!-- your code here -->
    </Grid>
</DataTemplate>

次に、コードで:

public void HookLVIClicked(object sender, RoutedEventArgs e) {
    var fe = (FrameworkElement)sender;
    var lvi = (ListViewItem)fe.Tag;
    lvi.MouseDoubleClick += MyMouseDoubleClickHandler;
} 
于 2009-06-01T09:00:00.650 に答える
0

送信者は、ListViewItem ではなく ListView 型です。

    private void listViewTriggers_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ListView triggerView = sender as ListView;
        if (triggerView != null)
        {
            btnEditTrigger_Click(null, null);
        }
    }
于 2014-10-28T16:55:19.577 に答える
0

ListBox DoubleClick イベントで、リストボックスの selecteditem(s) メンバーを取得します。

void ListBox1DoubleClick(object sender, EventArgs e)
    {
        MessageBox.Show(string.Format("SelectedItem:\n{0}",listBox1.SelectedItem.ToString()));
    }
于 2009-05-30T07:16:13.290 に答える