मेरे पास VirtualizingStackPanel
के साथ एक अजीब व्यवहार है। मेरे पास ऐसी वस्तुओं के साथ एक सूची है जिसमें TextBlock
TextWrap="Wrap"
हैं। यहाँ कोड है:वर्चुअलाइजिंगस्टैक पैनेल और टेक्स्ट रैपिंग बग? विंडोज फोन
<ListBox x:Name="messagesList" ItemsSource="{Binding Messages}" >
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
...
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<CheckBox Style="{Binding Own, Converter={StaticResource MsgTypeToStyle}}"
Tag="{Binding TimeString}"
IsEnabled="True">
<TextBlock Text="{Binding Content}" TextWrapping="Wrap"/>
</CheckBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
यह बहुत अच्छा काम करता है, लेकिन अगर मैं बहुत तेजी से स्क्रॉल करने के लिए कोशिश (एमुलेटर पर माउस का उपयोग कर, नहीं prommatically) वहाँ कुछ पुस्तक में चल रहा है, शायद HorizontallOffset
कभी कभी गलत गणना करता है, और में बहुत अजीब परिणाम के साथ अंत में नीचे (छवि देखें, सही छवि सामान्य व्यवहार demostrates)।
अनुसंधान के बाद मैं संयोजन VirtualizingStackPanel
और TextBlock.TextWrap="Wrap"
में है कि समस्या पता लगा, अगर मैं इस जोड़े को सब ठीक से काम करता से एक तत्व को हटा दें।
लेकिन मुझे बड़ी टेक्स्ट गणना के कारण वर्चुअलाइजेशन की आवश्यकता है, और TextWrap
सही टेक्स्ट प्रदर्शित करने के लिए।
तो मैं वर्चुअलाइजिंग पैनल का अपना कार्यान्वयन करने के बारे में सोचता हूं, क्या आप कृपया मुझे मार्गदर्शन कर सकते हैं, यह कैसे करें, या वर्तमान समस्या को कैसे ठीक किया जाए?
युपीडी: समस्या: (!) पहले दो छवियों ListBox
पहले से ही है पर
नीचे करने के लिए स्क्रॉल (यह किसी भी अधिक नीचे स्क्रॉल नहीं किया जा सकता है), लेकिन तत्वों गलत तरीके से रखा, सही रखने दाईं ओर दिखाई देता छवि। यह तभी होता है जब आप बहुत तेजी से स्क्रॉल करेंगे।
यूपीडी 2: मिलान अग्रवाल के लिए धन्यवाद। उन्होंने मेरी समस्या here का एक अच्छा मामला प्रदान किया। लगता है कि वास्तव में ListBox
में एक बग है। प्रदान किया गया वर्कअराउंड मेरे परिदृश्य में फिट नहीं है, क्योंकि मुझे ListBox
आइटम के अंदर नियंत्रण के साथ बातचीत करने की आवश्यकता है। अब मैं ManipulationCompleted
घटना को पकड़ने और देखें कि क्या यह Inertial
है, इसलिए कि पुस्तक का मतलब है करने के लिए कोशिश कर रहा हूँ और मैं पृष्ठ पर ध्यान केंद्रित करने के लिए सेट:
void messagesList_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
if (e.IsInertial)
this.Focus();
}
पी.एस. शुभकामनाएं शुभकामनाओं के लिए धन्यवाद;)
OFF_TOPIC: वीके प्रतियोगिता में गुड लक =) –