Tôi có một hành vi lạ với VirtualizingStackPanel
. Tôi có một danh sách có các mặt hàng có chứa TextBlock
với TextWrap="Wrap"
. Đây là mã:VirtualizingStackPanel và lỗi TextWrapping? Windows Phone
<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>
Nó hoạt động khá tốt, nhưng nếu tôi cố gắng di chuyển rất nhanh (sử dụng chuột trên giả lập, không prommatically) có một số tụt hậu trong cuộn, có lẽ HorizontallOffset
đôi khi tính toán sai lầm, và trong dưới cùng trong kết thúc với kết quả rất lạ (xem hình ảnh, hình ảnh bên phải demostrates hành vi bình thường).
Sau khi nghiên cứu tôi đã tìm ra vấn đề mà kết hợp VirtualizingStackPanel
và TextBlock.TextWrap="Wrap"
, nếu tôi loại bỏ một phần tử từ cặp vợ chồng này tất cả các hoạt động chính xác.
Nhưng tôi cần ảo hóa vì số lượng mục lớn và TextWrap
để hiển thị văn bản chính xác.
Vì vậy, tôi nghĩ đến việc triển khai Bảng ảo hóa của riêng tôi, bạn có thể hướng dẫn tôi, cách thực hiện việc này hay cách khắc phục sự cố hiện tại?
UPD: Vấn đề: (!)
trên hai hình ảnh đầu tiên ListBox
đã cuộn xuống cuối (nó không thể được cuộn xuống nữa), nhưng yếu tố được đặt không đúng cách, đúng đặt hiển thị bên phải hình ảnh. Điều này xảy ra chỉ khi bạn sẽ cuộn rất nhanh.
UPD2: Nhờ Milan Aggarwal. Ông đã cung cấp một trường hợp tốt về vấn đề của tôi here. Dường như đó thực sự là một lỗi trong ListBox
. Workaround, cung cấp không phù hợp trong kịch bản của tôi, bởi vì tôi cần phải tương tác với các điều khiển bên trong ListBox
mục. Bây giờ tôi đang cố gắng để bắt ManipulationCompleted
sự kiện và kiểm tra xem nó là Inertial
, nếu có thì đó có nghĩa là cuộn và tôi đặt tập trung to page:
void messagesList_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
if (e.IsInertial)
this.Focus();
}
T.B. cảm ơn vì chúc may mắn;)
OFF_TOPIC: Chúc may mắn trong cuộc thi VK =) –