2010-08-22 13 views
7

पर कहीं भी नहीं, मेरे पास आइटम के लिए डेटामैप्लेट वाला एक सूची बॉक्स है। समस्या यह है कि किसी आइटम का चयन करना आइटम पर कहीं भी क्लिक करके काम नहीं करता है; वास्तव में काम करने के लिए मुझे इसके लिए एक विशिष्ट उप-तत्व पर क्लिक करना होगा।लिस्टबॉक्स डेटामैप्लेट - आइटम उपरोक्त पर क्लिक करके केवल चयन योग्य, आइटम

मेरे आइटम में एक छवि और एक टेक्स्टब्लॉक है। यदि मैं छवि या टेक्स्ट-ब्लॉक पर माउस को घुमाता हूं, तो मुझे वास्तव में होवर-प्रभाव दिखाई देता है। यदि मैं आइटम के किसी भी 'खाली' स्थान पर माउस को घुमाता हूं, तो कोई होवर प्रभाव नहीं होता है (और जब मैं वहां क्लिक करता हूं तो कोई चयन नहीं)।

उदाहरण छवि: http://i33.tinypic.com/wvtleg.png

अगर मैं पर क्लिक करें (या पर होवर) वास्तविक पाठ या छवि यह ठीक है, काम करता लेकिन अगर मैं खाली क्षेत्रों में मेरी माउस होवर (मैं एक लाल रेखा खींची गए इसके आसपास :)) सूची बॉक्स प्रतिक्रिया नहीं देता है।

आइटम की जगह में कहीं भी पर क्लिक करने के लिए सूची बॉक्स होवरिंग/क्लिक करने के लिए मैं कैसे हो सकता हूं?

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

उत्तर

7

क्वार्टरमेस्टर ने बताया - आपको ग्रिड की पृष्ठभूमि सेट करने की आवश्यकता है - लेकिन आपको निम्न संसाधनों को अपने संसाधनों में सेट करने की भी आवश्यकता है क्योंकि ListBoxItems 'क्षैतिजकंटेंटलाइन डिफ़ॉल्ट रूप से बाएं सेट पर सेट है। (इसे सूची बॉक्स पर सेट करने के लिए पर्याप्त नहीं है)

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

धन्यवाद, यह काम किया। – Pygmy

13

ऐसा लगता है अपने ListBoxItem तरह hit testing का जवाब नहीं है:

पूर्णता के लिए यहां मेरी लिस्टबॉक्स + टेम्पलेट है। पारदर्शी करने के लिए ग्रिड की पृष्ठभूमि सेट करके देखें:

<Grid Background="Transparent"> 

डिफ़ॉल्ट मान रिक्त है, जो तत्व परीक्षण हिट करने के लिए अदृश्य कर देगा। पृष्ठभूमि को पारदर्शी पर सेट करना प्रदर्शन को प्रभावित नहीं करेगा बल्कि तत्व को हिट करने की अनुमति देगा। ListBoxItem के लिए डिफ़ॉल्ट शैली में पारदर्शी पृष्ठभूमि होगी, लेकिन आपने इसे पुन: स्थापित कर दिया होगा।

+0

इसने वास्तव में मेरी मदद की। मैंने कुछ समय के लिए इस समाधान की तलाश की है ... मेरे मामले में ग्रिड की बजाय मेरे पास एक स्टैकपैनल था, और यह विज्ञापित के रूप में काम करता है, इसलिए नीचे की रेखा है: यदि आप अपने कंटेनर (पैनल) को अपने लिए क्लिक पंजीकृत करना चाहते हैं ListBox, पृष्ठभूमि को पारदर्शी पर सेट करें। – birdypme

संबंधित मुद्दे