2010-08-22 11 views
7

Tôi có một hộp danh sách với một bảng dữ liệu cho các mục. Vấn đề là việc chọn một mục không hoạt động bằng cách chỉ cần nhấp vào bất kỳ nơi nào trên mục; Tôi phải bấm vào một yếu tố phụ cụ thể để nó thực sự hoạt động.Danh sách dữ liệu hộp danh sách - mục chỉ có thể chọn bằng cách nhấp vào một phần phụ, không chỉ ở bất kỳ đâu trên mục

Mục của tôi có hình ảnh và khối chữ. Nếu tôi di chuột qua hình ảnh hoặc khối văn bản, tôi thực sự thấy hiệu ứng di chuột. Nếu tôi di chuột qua bất kỳ khoảng trống 'trống' nào của mục, không có hiệu ứng di chuột (và không có lựa chọn nào khi tôi nhấp vào đó).

ảnh

Ví dụ: http://i33.tinypic.com/wvtleg.png

Nếu tôi bấm vào (hoặc di chuột qua) các văn bản thực tế hoặc hình ảnh nó hoạt động tốt, nhưng nếu tôi di chuột của tôi trong các lĩnh vực có sản phẩm nào (Tôi đã vẽ một đường đỏ xung quanh nó :)) hộp danh sách không trả lời.

Làm cách nào để nhận được hộp cuộn/nhấp chuột để trả lời khi nhấp vào ở bất kỳ đâu trong không gian của mục?

Đối với đầy đủ ở đây là Listbox + mẫu của tôi:

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

Trả lời

7

Như Quartermeister đã chỉ ra - bạn cần đặt Nền của lưới - nhưng bạn cũng cần phải đặt kiểu sau trong tài nguyên của bạn là ListBoxItems 'HorizontalContentAlignment được đặt thành Trái theo mặc định. (Không đủ để đặt nó trên ListBox)

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

Cảm ơn, điều này đã làm việc. – Pygmy

13

Nghe có vẻ như ListBoxItem của bạn không đáp ứng hit testing. Hãy thử đặt Nền của Lưới thành Trong suốt:

<Grid Background="Transparent"> 

Giá trị mặc định bằng không, làm cho phần tử không nhìn thấy được để thử nghiệm. Đặt nền thành trong suốt sẽ không ảnh hưởng đến màn hình nhưng sẽ cho phép phần tử được nhấn. Kiểu mặc định cho ListBoxItem sẽ có nền trong suốt, nhưng bạn có thể đã đặt lại nó.

+0

Điều này thực sự đã giúp tôi. Tôi đã tìm giải pháp này trong một thời gian ... Tôi đã có một StackPanel thay vì Grid trong trường hợp của tôi, và nó hoạt động như quảng cáo, do đó, dòng dưới cùng là: nếu bạn muốn container của bạn (bảng điều khiển) để đăng ký nhấp chuột cho bạn ListBox, đặt Background thành Transparent. – birdypme