C# 使用DataTemplate双击项目的列表框

C# 使用DataTemplate双击项目的列表框,c#,wpf,events,event-handling,listbox,C#,Wpf,Events,Event Handling,Listbox,我想知道是否可以轻松构建列表框的双击功能。我有一个列表框,其集合为ItemSource。集合包含自己的数据类型 我为我的项目定义了一个数据模板,它由堆栈面板s和文本块s组成 现在我想检测双击列表项的双击事件。目前,我尝试了以下方法,但不起作用,因为它不返回绑定到列表框的项目,而是返回文本块 if (TemplateList.SelectedIndex != -1 && e.OriginalSource is Template) { this.SelectedTem

我想知道是否可以轻松构建
列表框的双击功能。我有一个
列表框
,其集合为
ItemSource
。集合包含自己的数据类型


我为我的
项目定义了一个
数据模板
,它由
堆栈面板
s和
文本块
s组成


现在我想检测双击列表项的双击事件。目前,我尝试了以下方法,但不起作用,因为它不返回绑定到
列表框的项目,而是返回
文本块

if (TemplateList.SelectedIndex != -1 && e.OriginalSource is Template)
{
    this.SelectedTemplate = e.OriginalSource as Template;
    this.Close();
}

如果图标不是
ListBoxItems
,而是自己的
DataTemplates
,那么处理
列表框中
项目上的双击事件的干净方法是什么?

我一直在玩这个,我想我已经做到了

好消息是,您可以将样式应用于ListBoxItem并应用DataTemplate-一个并不排除另一个

换句话说,您可以有如下内容:

    <Window.Resources>
        <DataTemplate x:Key="fileTemplate" DataType="{x:Type local:FileTemplate}">
...
        </DataTemplate>
    </Window.Resources>

    <Grid>

        <ListBox ItemsSource="{Binding Templates}" 
                 ItemTemplate="{StaticResource fileTemplate}">
            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <EventSetter Event="MouseDoubleClick" Handler="DoubleClickHandler" />
                </Style>
            </ListBox.ItemContainerStyle>
        </ListBox>

    </Grid>
public void DoubleClickHandler(object sender, MouseEventArgs e)
{
    // item will be your dbl-clicked ListBoxItem
    var item = sender as ListBoxItem;

    // Handle the double-click - you can delegate this off to a 
    // Controller or ViewModel if you want to retain some separation
    // of concerns...
}