0

項目の ListBox を持つ単純な WPF アプリケーションがあります。この例を簡単にするために、文字列のリストにしましたが、実際には複雑な型のリストになります。リストボックス内のアイテム自体がダブルクリックされたときに、それに応答したい。どうやら、アイテム自体の ListBox に直接のダブルクリック イベントはありません。(リストボックス自体ではなく) ダブルクリックされた ListBox 内の項目に応答する簡単な方法はありますか?

ここに私のxamlがあります:

<Window x:Class="WpfApplication12.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox>
            <ListBox.Items>
                <sys:String>Item1</sys:String>
                <sys:String>Item2</sys:String>
                <sys:String>Item3</sys:String>
                <sys:String>Item4</sys:String>
                <sys:String>Item5</sys:String>
            </ListBox.Items>
        </ListBox>
    </Grid>
</Window>
4

1 に答える 1

0

これは、ItemContainerStyle を作成し、EventSetter を追加することで簡単に実現できます。

XAML を次のように変更します。

<Window x:Class="WpfApplication12.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox>

            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                    <EventSetter Event="MouseDoubleClick" Handler="ListBoxItem_DoubleClick" />
                </Style>
            </ListBox.ItemContainerStyle>

            <ListBox.Items>
                <sys:String>Item1</sys:String>
                <sys:String>Item2</sys:String>
                <sys:String>Item3</sys:String>
                <sys:String>Item4</sys:String>
                <sys:String>Item5</sys:String>
            </ListBox.Items>
        </ListBox>
    </Grid>
</Window>

分離コード:

namespace WpfApplication12
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {     
        public MainWindow()
        {
            InitializeComponent();
        }
        private void ListBoxItem_DoubleClick(object sender, MouseButtonEventArgs e)
        {
            var listBoxItem = sender as ListBoxItem;
            if (listBoxItem != null)
            {
                var content = listBoxItem.Content as string;
                MessageBox.Show(content);
            }
        }
    }
}

EventSetters について少し説明している MSDN ページへのリンクを次に示します: http://msdn.microsoft.com/en-us/library/system.windows.eventsetter.aspx

于 2014-06-19T22:00:39.087 に答える