- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对扩展 ListBox
的类有疑问在 Windows Phone 7 Silverlight 中。这个想法是有一个完整的ScrollViewer
(黑色,例如填满整个手机屏幕)并且 ItemsPresenter
(红色)有边距(绿色)。这用于在整个列表周围留有边距,但滚动条从右上边缘开始,到深色矩形的右下边缘结束:
问题是,ScrollViewer
无法滚动到最后,它会从列表中的最后一个元素中删除 50 个像素。如果我使用 StackPanel
而不是 VirtualizingStackPanel
边距是正确的,但列表不再是虚拟化的。
感谢您的任何想法,我已经尝试了很多,但没有任何工作。这是控制错误吗?
解决方案:使用 InnerMargin
ExtendedListBox
的属性(property)来自 MyToolkit 的控制图书馆!
C#:
public class MyListBox : ListBox
{
public MyListBox()
{
DefaultStyleKey = typeof(MyListBox);
}
}
<Application
x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">
<Application.Resources>
<ResourceDictionary>
<Style TargetType="local:MyListBox">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ScrollViewer>
<ItemsPresenter Margin="30,50,30,50" x:Name="itemsPresenter" />
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
...
</Application>
VirtualizingStackPanel
至
StackPanel
在 App.xaml 中,它按预期工作,但没有虚拟化
StackPanel
而不是
VirtualizingStackPanel
):
ObservableCollection
中添加一些逻辑或者 View 模型是没有选择的。
最佳答案
我当前的解决方案:始终更改列表最后一个元素的边距...
public Thickness InnerMargin
{
get { return (Thickness)GetValue(InnerMarginProperty); }
set { SetValue(InnerMarginProperty, value); }
}
public static readonly DependencyProperty InnerMarginProperty =
DependencyProperty.Register("InnerMargin", typeof(Thickness),
typeof(ExtendedListBox), new PropertyMetadata(new Thickness(), InnerMarginChanged));
private static void InnerMarginChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var box = (ExtendedListBox)d;
if (box.lastElement != null)
box.UpdateLastItemMargin();
box.UpdateInnerMargin();
}
private void UpdateInnerMargin()
{
if (scrollViewer != null)
{
var itemsPresenter = (ItemsPresenter)scrollViewer.Content;
if (itemsPresenter != null)
itemsPresenter.Margin = InnerMargin;
}
}
private void UpdateLastItemMargin()
{
lastElement.Margin = new Thickness(lastElementMargin.Left, lastElementMargin.Top, lastElementMargin.Right,
lastElementMargin.Bottom + InnerMargin.Top + InnerMargin.Bottom);
}
private FrameworkElement lastElement = null;
private Thickness lastElementMargin;
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);
OnPrepareContainerForItem(new PrepareContainerForItemEventArgs(element, item));
if ((InnerMargin.Top > 0.0 || InnerMargin.Bottom > 0.0))
{
if (Items.IndexOf(item) == Items.Count - 1) // is last element of list
{
if (lastElement != element) // margin not already set
{
if (lastElement != null)
lastElement.Margin = lastElementMargin;
lastElement = (FrameworkElement)element;
lastElementMargin = lastElement.Margin;
UpdateLastItemMargin();
}
}
else if (lastElement == element) // if last element is recycled it appears inside the list => reset margin
{
lastElement.Margin = lastElementMargin;
lastElement = null;
}
}
}
PrepareContainerForItem
事件,一个属性和
IsScrolling
的事件(还有一个扩展的
LowProfileImageLoader
和
IsSuspended
属性,可以在
IsScrolling
事件中设置以提高滚动平滑度。 ..) 和新属性
InnerMargin
用于描述的问题...
关于silverlight - 虚拟化 ListBox 的 ItemsControl 的边距无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008929/
我在使用自定义 ListView 时遇到了一些问题(滚动 ListView 时内部的复选框丢失了它们的状态)。我可以在不枚举可视化树的情况下禁用 ListView 虚拟化吗?
我有一个 ItemsControl包含我想虚拟化的数据列表,但是 VirtualizingStackPanel.IsVirtualizing="True"似乎不适用于 ItemsControl . 真
有没有人有我可以在 WPF 应用程序中使用的功能虚拟化 WrapPanel? 我已经在 http://virtualwrappanel.codeplex.com/ 下载并尝试了实现.但是,我收到以下异
我试图弄清楚这个虚拟化功能,我不确定我是否理解错误或发生了什么,但我正在使用 ANTS 内存分析器来检查虚拟化 TreeView 中的项目数,它只是不断增加。我有一个包含 1,001 个项目(1 个根
我对虚拟机的 CPU 虚拟化有疑问。我无法理解即时到 native 代码翻译与陷阱和模拟翻译之间的区别。 据我所知,在第一种情况下,假设我从不同的平台模拟二进制代码,如果我有 x86 CPU,代码将转
我们正在尝试想出一种虚拟化 TreeView 的好方法,数据并不是真正的问题,因为它非常轻(每个项目大约 16 字节),问题是我们可能有数万个,虽然实际数据只占用 160 kb 内存,但 TreeVi
我对虚拟机的 CPU 虚拟化有疑问。我无法理解即时到 native 代码翻译与陷阱和模拟翻译之间的区别。 据我所知,在第一种情况下,假设我从不同的平台模拟二进制代码,如果我有 x86 CPU,代码将转
WPF 4 是否还包含一个虚拟化的 WrapPanel,或者从现有面板派生一个是否容易。我想制作一个地址 View ,例如 outlook。 最佳答案 我认为不可能实现具有完全虚拟化(双向)的 Wra
我有一个 VB6 应用程序,我已经销售了 12 年多。有时我的用户很难让应用程序运行。数据写入将进入/My Documents,因此除了安装文件(EXE 等)之外什么都没有进入 C:\Program
我试图将一个新环境的要求放在一起,以包含运行 Sql Server 的 TeamCity、几个构建代理(目前)和一个 SVN 存储库。 目前有 6 个开发人员,将有 5 个活跃的解决方案参与 CI 过
关注 this question和 this question ,现在我有一个带有分层数据的 TreeView,如下图所示: 由于数据量大,我转了Virtualization TreeView 的属性
是否有一种简单的方法可以禁用 ListBox 控件上的 UI 虚拟化?我尝试使用“FindName()”方法在 ListBox 控件中查找控件,但如果该控件明显位于 Web 浏览器窗口之外,则无法找到
我正在尝试将 ListBox 用作包含多个项目的 View ,当然,我需要在其中使用 UI 虚拟化。 问题是只有当我这样声明 ListBox 时虚拟化才有效:
我有一个基于 .NET 4.0 的 Winform 应用程序,我使用 Spoon Virtual Application Studio 2012 对其进行了虚拟化。 当我使用 VS 2010 构建应用
我正在尝试将 ListBox 用作包含多个项目的 View ,当然,我需要在其中使用 UI 虚拟化。 问题是只有当我这样声明 ListBox 时虚拟化才有效:
我正在使用“react-virtualized”中的表。一切都很顺利。 我使用 rowRenderer 自定义了我的行,以添加“react-dnd”并让我的行能够被拖动。 我的问题是关于细胞的。可以定
我正在尝试弄清楚是否可以创建一个 SQL 函数,将参数行视为“鸭子类型”。也就是说,我希望能够传递来自具有某些公共(public)列名的不同表或 View 的行,并在函数内对这些列进行操作。 这里有一
我正在构建一个程序,该程序在主程序文件之外具有多个外部库和扩展。我的项目总大小为 134.2 MB。我想用 Turbo Studio 制作它的便携版本,但我面临一个明显的问题;在捕获文件并构建项目后,
这是我试图通过 WPF 实现的目标。 wrappanel 中作为标题和下方按钮的文本 block 。问题是这需要滚动等。我已经使用 ItemsControl 和每个组的绑定(bind)实现了这一点。我
今天我决定最终尝试虚拟化 TreeView。要做到这一点,绑定(bind)是必需的。所以我决定测试两件事——基于类型的 HierarchicalDataTemplate + 虚拟化。 我为一些数据创建
我是一名优秀的程序员,十分优秀!