WPF: привязки ввода на панели стека - PullRequest
2 голосов
/ 09 июля 2009

Я хочу поместить команду в ListBoxItem. ListBoxItem использует DataTemplate, состоящий из StackPanel (содержащий изображение и TextBlock, оба с использованием Binding). Я хочу, чтобы двойной щелчок на этом 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, она работает.

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 июля 2009

Мой код наконец-то выглядит так:

<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>

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

1 голос
/ 09 июля 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>
...