2011-07-11 14 views
6

क्या कोई सुझाव दे सकता है कि मैं एक WPF ListBox को कैसे कार्यान्वित कर सकता हूं (प्रभावी रूप से) में एक पारदर्शी/हिट-टेस्ट-अदृश्य पृष्ठभूमि है, लेकिन जिनके आइटम अभी भी हिट-टेस्ट-विज़ुअल हैं?चुनिंदा वस्तुओं के साथ पारदर्शी WPF ListBox

दूसरे शब्दों में, मैं सूची बॉक्स के पृष्ठभूमि के माध्यम से क्लिक करने में सक्षम होना चाहता हूं - इसके नीचे नियंत्रण करने के लिए, लेकिन फिर भी सूची बॉक्स के आइटम का चयन करने में सक्षम होना चाहिए।

मेरे पास कस्टम लेआउट पैनल का उपयोग करके ListBox है (यह एक सूची बॉक्स है क्योंकि वस्तुओं को चयन करने योग्य होना आवश्यक है)। हालांकि, मुझे इस पैनल को अन्य नियंत्रणों के शीर्ष पर ओवरलेड करने की आवश्यकता है, जिससे उन्हें सामान्य रूप से सामान्य रूप से उपयोग करने की अनुमति मिलती है।

मैं Background="Transparent" और IsHitTestVisible="False" के विभिन्न संयोजनों की कोशिश की है, लेकिन मैं मैं गलत तर्ज पर हो सकता है संदेह है ...

आशा इस समझ में आता है - मैं तो किसी भी मार्गदर्शन सबसे की सराहना की होगी WPF के लिए नया हूँ! धन्यवाद।

उत्तर

7

"पृष्ठभूमि करने के लिए {x: अशक्त} सेट करके देखें।। ListeItemContainer और ListBox पर ही

पारदर्शी जिसके कारण आप अब भी उस पर हिट परीक्षण हो रही है, अभी भी मारा-परीक्षण योग्य है

संपादित

मैं एक नमूना पर WPF इंस्पेक्टर भाग गया और पाया गया कि डिफ़ॉल्ट ListBox टेम्पलेट में ScrollViewer पैदा कर रहा था माउस ListBox में रहने के लिए क्लिक करता है।

यहाँ है एक सूची बॉक्स नियंत्रण टेम्पलेट जिसमें स्क्रॉलव्यूअर शामिल नहीं है। यह माउस को टेक्स्टबॉक्स के पीछे टेक्स्टबॉक्स से गुज़रने की अनुमति देता है, लेकिन फिर भी उपयोगकर्ता को सूची बॉक्स में आइटम चुनने की अनुमति देता है।

<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

धन्यवाद @ नाथन - मैंने कोशिश की लेकिन यह काम नहीं कर रहा है। नीचे दिए गए कुछ भी क्लिक करने योग्य नहीं है जब तक कि मैं 'IsHitTestVisible =" गलत "सेट करता हूं, लेकिन निश्चित रूप से इसका मतलब है कि आइटम चयन योग्य नहीं हैं ... – FuzzyLogic

+0

क्रिश्चियन मोज़र के डब्ल्यूपीएफ इंस्पेक्टर (http://www.wpftutorial.net/inspector) जैसे टूल का उपयोग करने का प्रयास करें .html) यह देखने के लिए कि ListBox द्वारा कौन सी परतें/नियंत्रण प्रदान किए जा रहे हैं। इससे आपको उस परत को ढूंढने में मदद करनी चाहिए जिसमें शून्य पृष्ठभूमि होनी चाहिए। – NathanAW

+0

मैंने इसे WPF इंस्पेक्टर के साथ देखा और समस्या होने के लिए सूची बॉक्स में स्क्रॉलव्यूअर पाया। ऊपर एक नमूना है जो ListBox टेम्पलेट से ScrollViewer को हटा देता है। ऐसा लगता है कि आपने काम किया है। – NathanAW