2011-07-11 38 views
6

Bất kỳ ai cũng có thể đề xuất cách tôi có thể triển khai Hộp danh sách WPF (hiệu quả) có nền trong suốt/không thể kiểm tra được, nhưng mục nào vẫn có thể nhìn thấy được?Hộp danh sách WPF trong suốt với các mục có thể chọn

Nói cách khác, tôi muốn có thể nhấp - thông qua nền của ListBox - để kiểm soát bên dưới nó, nhưng vẫn có thể chọn các mục của ListBox.

Tôi có ListBox bằng bảng điều khiển bố cục tùy chỉnh (đó là ListBox vì các mục cần phải chọn). Tuy nhiên, tôi cần bảng điều khiển này để được phủ lên trên các điều khiển khác, cho phép chúng vẫn được sử dụng bình thường.

Tôi đã thử kết hợp khác nhau của Background="Transparent"IsHitTestVisible="False" nhưng tôi nghi ngờ tôi có thể trên các đường sai ...

Hy vọng điều này có ý nghĩa - Tôi mới đến WPF vì vậy bất kỳ hướng dẫn sẽ được đánh giá cao nhất! Cảm ơn.

Trả lời

7

Hãy thử thiết lập nền để "{x: Null}.. Trên ListeItemContainer và ListBox tự

Transparent vẫn hit-kiểm chứng, đó là lý do tại sao bạn vẫn nhận được các bài kiểm tra hit vào nó

EDIT

tôi chạy WPF Thanh tra trên một mẫu và thấy rằng ScrollViewer trong mẫu ListBox mặc định đã gây cú click chuột để ở lại trong ListBox.

đây là một mẫu điều khiển ListBox không bao gồm ScrollViewer. Nó cho phép chuột di chuyển tới TextBox phía sau hộp danh sách, nhưng vẫn cho phép người dùng chọn các mục trong hộp danh sách.

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    > 
    <Window.Resources> 
     <SolidColorBrush x:Key="ListBorder" Color="#828790"/> 
     <Style x:Key="ListBoxStyle1" TargetType="{x:Type ListBox}"> 
      <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> 
      <Setter Property="BorderBrush" Value="{StaticResource ListBorder}"/> 
      <Setter Property="BorderThickness" Value="1"/> 
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
      <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
      <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
      <Setter Property="ScrollViewer.CanContentScroll" Value="true"/> 
      <Setter Property="Stylus.IsFlicksEnabled" Value="False"/> 
      <Setter Property="VerticalContentAlignment" Value="Center"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ListBox}"> 
         <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true"> 
          <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsEnabled" Value="false"> 
           <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
          </Trigger> 
          <Trigger Property="IsGrouping" Value="true"> 
           <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <Grid Width="100"> 
    <TextBox TextWrapping="Wrap">I'm in the background. I'm in the background. I'm in the backgroun.</TextBox> 
    <ListBox Background="{x:Null}" Style="{StaticResource ListBoxStyle1}"> 
     <ListBoxItem Margin="10" Background="#999">Hello</ListBoxItem> 
     <ListBoxItem Margin="10" Background="#999">Hello</ListBoxItem> 
     <ListBoxItem Margin="10" Background="#999">Hello</ListBoxItem> 
     <ListBoxItem Margin="10" Background="#999">Hello</ListBoxItem> 
    </ListBox> 
    </Grid> 
</Window> 
+0

Thanks @Nathan - Tôi đã thử nó nhưng điều đó dường như không hoạt động. Không có gì bên dưới có thể nhấp được trừ khi tôi đặt 'IsHitTestVisible =" False "', nhưng tất nhiên điều đó có nghĩa là các mục không thể chọn được ... – FuzzyLogic

+0

Hãy thử sử dụng công cụ như Thanh tra WPF của Christian Moser (http://www.wpftutorial.net/inspector) .html) để xem những lớp/điều khiển nào đang được hiển thị bởi ListBox. Điều này sẽ giúp bạn xác định vị trí lớp cần phải có nền rỗng. – NathanAW

+0

Tôi đã xem xét điều này với Thanh tra WPF và thấy ScrollViewer trong ListBox là vấn đề. Trên đây là một mẫu để loại bỏ ScrollViewer khỏi mẫu ListBox. Dường như nó hoạt động như bạn đã hỏi. – NathanAW

Các vấn đề liên quan