Таблица данных со списком - элемент можно выбрать только щелчком по подэлементу, а не просто где-нибудь на элементе - PullRequest
8 голосов
/ 23 августа 2010

У меня есть список с табличкой данных для предметов. Проблема в том, что выбор элемента не работает, просто щелкнув в любом месте элемента; Мне нужно нажать на конкретный подэлемент, чтобы он действительно работал.

У моего товара есть изображение и текстовый блок. Если я наведу курсор мыши на изображение или текстовый блок, я на самом деле вижу эффект наведения. Если я наведу указатель мыши на любое из «пустых» мест элемента, эффект парения не будет (и при выборе я не выделю).

Пример изображения: http://i33.tinypic.com/wvtleg.png

Если я нажму (или наведу курсор) на текст или изображение, оно будет работать нормально, но если я наведу указатель мыши на пустые области (я нарисовал красную линию вокруг него :)), список не отвечает.

Как получить список, зависающий / щелкающий, чтобы ответить на нажатие в любом месте в пространстве элемента?

Для полноты вот мой шаблон Listbox +:

<ListBox Grid.Row="1"
  ItemsSource="{Binding Path=CreatableOutputWindows, Mode=OneWay}" Height="Auto"
  HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
  Margin="8,8,8,8"
  Name="listBox1" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="84"/>
          <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Border Margin="5" BorderBrush="Black" BorderThickness="2">
          <Image Source="{Binding Path=Image}" Stretch="Fill" Width="80" Height="50" />
        </Border>
        <StackPanel Grid.Column="1" Margin="5">
          <StackPanel Orientation="Horizontal" TextBlock.FontWeight="Bold">
            <TextBlock Text="{Binding Path=Name}" />
          </StackPanel>
        </StackPanel>
      </Grid>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

Ответы [ 2 ]

13 голосов
/ 23 августа 2010

Похоже, ваш ListBoxItem не отвечает на тестирование попаданий . Попробуйте установить прозрачный фон сетки:

<Grid Background="Transparent">

Значением по умолчанию является null, что делает элемент невидимым для проверки попадания. Установка прозрачного фона не повлияет на отображение, но позволит ударить элемент. Стиль по умолчанию для ListBoxItem будет иметь прозрачный фон, но вы, возможно, изменили его стиль.

8 голосов
/ 23 августа 2010

Как указывал Quartermeister - вам нужно установить фон сетки - но вам также нужно установить следующий стиль в ваших ресурсах, так как HorizontalContentAlignment в ListBoxItems имеет значение Left по умолчанию. (Недостаточно установить его в ListBox)

<ListBox.Resources>
    <Style TargetType="{x:Type ListBoxItem}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
    </Style>
</ListBox.Resources>
...