WPF: InputBindings на StackPanel

Я хочу поместить команду в ListBoxItem. ListBoxItem использует DataTemplate, состоящий из StackPanel (содержащий изображение и текстовый блок, оба используют привязку). Я хочу, чтобы двойной щелчок по этому ListBoxItem запускал команду.

Я пробовал это:

<DataTemplate>
    <StackPanel>
        <StackPanel.Resources>
            <CommonUI:CommandReference x:Key="DoubleClickCommand" Command="{Binding Path=DefaultCommand}" />                                
        </StackPanel.Resources>
        <StackPanel.InputBindings>
            <MouseBinding Gesture="LeftDoubleClick" Command="{StaticResource DoubleClickCommand}" />
        </StackPanel.InputBindings>
        <Image Source="{Binding Path=Thumbnail, IsAsync=True}" IsHitTestVisible="False"/>
        <TextBlock Text="{Binding Path=Name}" IsHitTestVisible="False">
    </StackPanel>
</DataTemplate>

Я также попытался разместить командные ресурсы на StackPanel, содержащем этот StackPanel, без каких-либо изменений. Я уверен в своей привязке, потому что, когда я помещаю часть InputBindings в TextBlock, она работает.

Спасибо


person Thia    schedule 09.07.2009    source источник


Ответы (2)


Наконец, мой код выглядит так:

<DataTemplate>
    <StackPanel Orientation="Vertical">
        <StackPanel.Resources>
            <CommonUI:CommandReference x:Key="DoubleClickCommand" Command="{Binding Path=DefaultCommand}" />
        </StackPanel.Resources>
        <StackPanel.InputBindings>
            <MouseBinding Gesture="LeftDoubleClick" Command="{StaticResource DoubleClickCommand}" />
        </StackPanel.InputBindings>
        <Image Source="{Binding Path=Thumbnail, IsAsync=True}" />
        <TextBlock Text="{Binding Path=Name}" />
    </StackPanel>
</DataTemplate>

В любом случае спасибо, мистер Пулен.

person Thia    schedule 09.07.2009

Попробуйте обработать событие в ListBox вместо StackPanel:

<ListBox>
  <ListBox.Resources>
    <CommonUI:CommandReference x:Key="DoubleClickCommand" Command="{Binding Path=DefaultCommand}" />
  </ListBox.Resources>
  <ListBox.InputBindings>
    <MouseBinding Gesture="LeftDoubleClick" Command="{StaticResource DoubleClickCommand}" />
  </ListBox.InputBindings>
  <DataTemplate>
    <StackPanel>
      <Image Source="{Binding Path=Thumbnail, IsAsync=True}" />
      <TextBlock Text="{Binding Path=Name}" />
    </StackPanel>
  </DataTemplate>
</ListBox>
person Julien Poulin    schedule 09.07.2009
comment
Кажется, сейчас работает. Я пробовал несколько вещей (в итоге выглядел точно так же, как код, который я отправил в моем вопросе, за исключением IsHitTestVisible = False). Спасибо, в любом случае :-) - person Thia; 09.07.2009