爲了引用listview控件的雙擊事件,我需要做些什麼?獲取列表視圖的項目doubleclick事件
回答
我正在使用類似的東西只觸發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);
}
}
在ListBox DoubleClick事件中獲取列表框的selecteditem(s)成員,並且您就是在那裏。
void ListBox1DoubleClick(object sender, EventArgs e)
{
MessageBox.Show(string.Format("SelectedItem:\n{0}",listBox1.SelectedItem.ToString()));
}
如果我使用列表框雙擊事件,我可以雙擊列表視圖上的任何地方,如果選擇任何項目,它會得到。我不需要它。只有在雙擊它時,我才需要點擊的項目。 – Sauron 2009-05-30 10:59:10
這是行不通的,因爲你會在滾動條或其他尷尬的地方碰到雙擊 – 2009-06-01 08:52:52
要麼使用MouseDoubleClick事件,而且所有MouseClick事件在eventargs變量「e」中都有一個單擊計數。所以如果e.ClickCount == 2,然後雙擊。
這很煩人,但要做到這一點的最好辦法是這樣的:
<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;
}
<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;
}
我也需要這個。我發現在msdn上:
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.activation.aspx
我覺得這個委託是爲了這個。
我在Microsoft開發人員中心找到了此信息。它工作正常,並忽略在錯誤的地方雙擊。正如你所看到的,重點是在觸發雙擊事件之前選擇一個項目。
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
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;
}
}
在和想打開一個窗口(不同的視圖)與的SelectedItem作爲上下文的列表框類似的問題(對我來說,這樣我就可以對其進行編輯)。
我發現的三個選項是:1.代碼隱藏2.使用附加行爲3.使用Blend的i:使用MVVM-Light的交互和EventToCommand。
我去第三選項,它看起來沿着這些路線的東西:
<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>
這就是它......當你在你想要的項目雙擊,你在視圖模型方法將被調用與SelectedItem作爲參數,你可以做任何你想要的:)
對我來說,我在這段代碼中雙擊ListView。
this.listView.Activation = ItemActivation.TwoClick;
this.listView.ItemActivate += ListView1_ItemActivate;
ItemActivate specify how user activate with items
當用戶做雙擊,ListView1_ItemActivate會觸發。 ListView ItemActivate的屬性是指訪問所選項目的集合。
private void ListView1_ItemActivate(Object sender, EventArgs e)
{
foreach (ListViewItem item in listView.SelectedItems)
//do something
}
它適用於我。
這裏是如何讓所選擇的對象和對象在WPF列表視圖匹配爲雙點擊列表視圖項代碼:
/// <summary>
/// Get the object from the selected listview item.
/// </summary>
/// <param name="LV"></param>
/// <param name="originalSource"></param>
/// <returns></returns>
private object GetListViewItemObject(ListView LV, object originalSource)
{
DependencyObject dep = (DependencyObject)originalSource;
while ((dep != null) && !(dep.GetType() == typeof(ListViewItem)))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null)
return null;
object obj = (Object)LV.ItemContainerGenerator.ItemFromContainer(dep);
return obj;
}
private void lvFiles_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
object obj = GetListViewItemObject(lvFiles, e.OriginalSource);
if (obj.GetType() == typeof(MyObject))
{
MyObject MyObject = (MyObject)obj;
// Add the rest of your logic here.
}
}
發件人是ListView的類型不是ListViewItem的。
private void listViewTriggers_MouseDoubleClick(object sender, MouseEventArgs e)
{
ListView triggerView = sender as ListView;
if (triggerView != null)
{
btnEditTrigger_Click(null, null);
}
}
使用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);
}
你可以先拿到的ListView,然後拿到所選的ListViewItem。 我有一個ListBox的例子,但ListView應該是類似的。
private void listBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ListBox box = sender as ListBox;
if (box == null) {
return;
}
MyInfo info = box.SelectedItem as MyInfo;
if (info == null)
return;
/* your code here */
}
e.Handled = true;
}
我還沒有足夠大的信譽評分添加評論哪裏會是最有幫助,但這是相對於那些問一個.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
}
我看到這個題目是高在谷歌,還有就是我的簡單和工作樣本:)
XAML:
<ListView Name="MainTCList" HorizontalAlignment="Stretch" MinHeight="440" Height="Auto" Margin="10,10,5.115,4" VerticalAlignment="Stretch" MinWidth="500" Width="Auto" Grid.Column="0" MouseDoubleClick="MainTCList_MouseDoubleClick" IsSynchronizedWithCurrentItem="True">
<ListView.View>
<GridView>
<GridViewColumn Header="UserTID" DisplayMemberBinding="{Binding UserTID}" Width="80"/>
<GridViewColumn Header="Title" DisplayMemberBinding="{Binding Title}" Width="410" />
</GridView>
</ListView.View>
</ListView>
C#
private void MainTCList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
TC item = (TC)MainTCList.Items.CurrentItem;
Wyswietlacz.Content = item.UserTID;
}
Wyswietlacz是一個測試標籤看到項目的內容:)我在這最後一行添加一個方法來加載頁面的數據從項目。
- 1. 列表視圖項目單擊事件
- 2. 列表視圖獲取項目返回
- 3. 獲取列表視圖項目
- 4. Android:GUI:從列表視圖獲取項目
- 5. 從列表視圖獲取項目[i]
- 6. 傳遞列表框項目到DoubleClick事件
- 7. 處理列表視圖項目內的項目單擊事件
- 8. 「所選項目變爲取消」事件在winform列表視圖
- 9. 列表框DoubleClick使用DataTemplate的項目
- 10. 雙擊列表視圖項目時獲取選定項目
- 11. 在DoubleClick事件中從QTreeWidget獲取ItemWidget
- 12. 獲得項目列表視圖
- 13. Qt5:獲取在列表視圖中單擊的項目的值
- 14. 帶有複選框事件的單獨列表視圖項目
- 15. 圖像視圖列表視圖項目
- 16. 如何從列表視圖中獲取項目的位置?
- 17. Android:無法獲取列表視圖中項目的ID
- 18. 在android中的列表視圖中獲取項目
- 19. 獲取自定義列表視圖的子項目
- 20. 獲取列表視圖錯誤的位置項目
- 21. Xamarin.Forms:獲取列表視圖的所有單元格/項目
- 22. 如何獲取嵌套列表視圖的選定項目?
- 23. 在OnItemClick上獲取項目的值列表視圖
- 24. 獲取列表視圖中點擊項目的索引
- 25. 如何從列表視圖中獲取所選項目的值
- 26. Android - 從列表視圖中獲取所選項目的文本
- 27. 如何在列表視圖上獲取項目的Y座標
- 28. 獲取劍道列表視圖中的選定項目數
- 29. JavaFX列表視圖 - 獲取當前選定項目的索引?
- 30. 如何從列表視圖中的選定項目獲取值?
可能你想綁定到物品的雙擊事件? – TheVillageIdiot 2009-05-30 07:08:41