リストビュー コントロールのダブルクリック イベントを参照するには、どうすればよいですか?
16 に答える
<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;
}
私はこのようなものを使用して、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);
}
}
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);
}
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;
}
}
最も役立つコメントを追加するのに十分な評価スコアはまだありませんが、これは .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
}
私もそれが必要でした。私はmsdnでそれを見つけました:
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.activation.aspx
このデリゲートはそのためだと思います。
これは 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
MouseDoubleClick イベントを使用するか、すべての MouseClick イベントの eventargs 変数 'e' にクリック カウントがあります。したがって、e.ClickCount == 2 の場合、ダブルクリックされたことになります。
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をパラメーターとして呼び出され、そこでやりたいことが何でもできます:)
面倒ですが、これを行う最善の方法は次のようなものです。
<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;
}
送信者は、ListViewItem ではなく ListView 型です。
private void listViewTriggers_MouseDoubleClick(object sender, MouseEventArgs e)
{
ListView triggerView = sender as ListView;
if (triggerView != null)
{
btnEditTrigger_Click(null, null);
}
}
ListBox DoubleClick イベントで、リストボックスの selecteditem(s) メンバーを取得します。
void ListBox1DoubleClick(object sender, EventArgs e)
{
MessageBox.Show(string.Format("SelectedItem:\n{0}",listBox1.SelectedItem.ToString()));
}