मेरे पास एक सिल्वरलाइट एप्लिकेशन है जो ListBox
में आइटमों की एक सूची प्रदर्शित करता है। प्रत्येक आइटम अपने आवेदन की एक अलग 'पेज' का प्रतिनिधित्व करता है तो मैं एक शैली है कि ItemContainerStyle
संपत्ति है कि इस तरह दिखता है पर लागू होता है है:किसी सूचीबॉक्स आइटम टेम्पलेट/डेटामैप्लेट में बटन का सही तरीके से उपयोग कैसे करें?
<Style x:Key="navigationItemContainerStyle" TargetType="ListBoxItem">
<Setter Property="Margin" Value="5,3"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Grid Cursor="Hand">
<VisualStateManager.VisualStateGroups>
<!-- code omitted --!>
</VisualStateManager.VisualStateGroups>
<Border x:Name="contentBorder"
Background="{StaticResource navigationHighlightBrush}"
CornerRadius="3"
Opacity="0"/>
<ContentControl x:Name="content"
Margin="10,5"
Content="{Binding}"
Foreground="DarkGray"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
शैली बहुत सरल है। यह Border
प्रदर्शित करता है जब ListBoxItem
की दृश्य स्थिति 'चयनित' के बराबर होती है। ध्यान दें कि सामग्री ContentControl
द्वारा होस्ट की गई है क्योंकि जब मैं 'चयनित' स्थिति में होता हूं तो Foreground
संपत्ति को बदलने में सक्षम होना चाहता हूं।
यह शानदार ढंग से काम करता है के रूप में नीचे स्क्रीनशॉट से देखा जा सकता है:
अब मैं चयनित आइटम नेविगेशन आह्वान करना चाहते हैं इसलिए यह विचार मैं था एक DataTemplate
कि प्रत्येक की सामग्री के सेट बनाने के लिए था एक HyperLinkButton
के लिए आइटम:
<DataTemplate x:Key="navigationListBoxItemTemplate">
<HyperlinkButton Content="{Binding}"
Background="Transparent"/>
</DataTemplate>
अब इस ItemTemplate
मेजबान के रूप में यह एक ContentControl
बजाय एकमें सामग्री है काम नहीं करता हैइसलिए मुझे ListBoxItem
टेम्पलेट को ContentPresenter
का उपयोग करने के लिए अपडेट करना पड़ा है।
<ContentPresenter x:Name="content" Margin="10,5"/>
मैं अब निम्नलिखित परिणाम प्राप्त:
जब मैं HyperLinkButton
ListBoxItem
अब अब चयनित पर क्लिक करें (मैं HyperLinkButton
बाहर बस क्लिक कर सकते हैं और ListBoxItem
चयनित हो जाता है) । HyperLinkButton
पर क्लिक होने पर मैं वास्तव में क्या चाहता हूं ListBoxItem
के लिए चुना गया है। HyperLinkButton
में चयन की कोई अवधारणा नहीं है इसलिए मैं ListBoxItem
की IsSelected
संपत्ति से बंध नहीं सकता हूं।
नोट: वास्तविक नेविगेशन पूरी तरह से काम करता है, समस्या पूरी तरह से ListBoxItems
की उपस्थिति के साथ है।
तो मेरी प्रश्न हैं:
- मैं इसे इसलिए जब
HyperLinkButton
क्लिक किया जाता है कि कर सकते हैं,ListBoxItem
पहली छवि की तरह चयनित हो जाता है? - मुझे
HyperLinkButton
के अग्रभूमि को बदलने के कुछ तरीके की आवश्यकता होगी जब इसे चुना गया है क्योंकि यहContentControl
कोContentPresenter
से स्वैप करने के कारण आइटम टेम्पलेट में अब नहीं किया गया है।
नोट: मैं शायद अपने ViewModel को ListBox
की SelectedItem
संपत्ति बंधन और वहाँ नेविगेशन से निपटने की आवश्यकता negating एक HyperLinkButton
प्रत्येक ListBoxItem
द्वारा की मेजबानी की है करने के लिए द्वारा इस समस्या का समाधान कर सकता है, लेकिन मैं अगर यह जानने में दिलचस्पी है मेरे वांछित परिणाम प्राप्त करने के लिए शैलियों और टेम्पलेट का उपयोग करना संभव है।
अद्यतन
मैं कोशिश करते हैं और इसका समाधान करने के चीजों की एक जोड़ी की कोशिश की है, लेकिन अभी तक असफल रही है। पहली बात मैंने कोशिश की मेरी DataTemplate
जो अनिवार्य रूप से नियंत्रण से डिफ़ॉल्ट रंग-रूप के सभी दूर करता है और लग रहा है, लेकिन मेरा आवेदन अभी भी जिस तरह से ऊपर वर्णित में बर्ताव करता है में HyperLinkButton
नियंत्रित करने के लिए एक नई शैली लागू करने गया था।
दूसरी बात मैंने कोशिश की गलत पर IsHitTestVisible
संपत्ति की स्थापना की गई थी। यह मुझे HyperLinkbutton
पर 'से' पर क्लिक करने और ListBoxItem
का चयन करने की अनुमति देता है लेकिन इसका मतलब है कि नेविगेशन अब अब लागू नहीं हुआ है।
हाय, आप अपने listBox_SelectionChanged() ईवेंट हैंडलर भीतर NavigationService.Navigate (URI) पद्धति का उपयोग करके की कोशिश कर सकते हैं? – prthrokz
@prthrokz - मुझे नेविगेशन विधि का आह्वान करने में कोई समस्या नहीं है। मेरी समस्या पूरी तरह से 'ListBoxItem' की प्रस्तुति के साथ है। –
क्या मेरा इरादा था कि तुम व्यावहारिक रूप से HyperLinkButton जोड़ने, क्योंकि जो मैं पद से समझ गया कि आप इसे करने के लिए स्विच करने के लिए, क्योंकि आप एक नेविगेशन लागू किया जा करना चाहता था था मिटा सकते हैं। – prthrokz