我有一个叫做Book的课;
class Book
{
public string Name { get; set; }
public string Author { get; set; }
public int PagesCount { get; set; }
public int Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
ListBox显示Books列表,并且ItemTemplate已被修改,以便直观地表示Book.文本显示了书的名称,作者和页数.然而,类别由某种颜色表示(例如,历史是蓝色,浪漫是红色等).现在,文本具有OuterGlowBitmap效果和从Category(int)到适当Color的值转换器.所有内容都绑定在DataTemplate for ListBoxItem中.从技术上讲,一切正常.
然而,问题在于性能.似乎outerGlow位图效果在处理器上很重,所以当我有大约500本书的列表时,从数据库中检索数据需要大约500ms,但实际将项目加载到ListBox大约需要10秒.即使加载完成,滚动也非常滞后.我试图将VirtualizingStackPanel.IsVirtualizing设置为True,但无济于事.(在任何给定时间,数据库中可以存在的最大书籍数量约为30000.)
但是,即使列表框中有超过100个项目,人类思维也无法快速处理,因此我无意加载并向用户列出所有搜索到的书籍.这就是为什么我创建了一个包装器导航类BookNavigator,它实际上将列表框绑定到它的ObservableCollection对象.所有书籍都被加载到这个BookNavigator中,但它们中只有X个显示在列表框中(通过将它们添加到observableCollection中).
这个问题是我希望显示的书籍数量足够小,以便列表框不显示滚动条,所以我可以实现我自己的滚动方法(第一个,上一个,下一个,最后一个,或者只是我自己的滚动条,不没问题.
如何计算要显示的项目数以便不显示滚动条?
弹出的两个问题: - 调整应用程序大小可以更改列表框的大小 - 并非所有列表框项目都具有相同的高度(取决于作者的数量).
有没有办法实现我想做的事情?
编辑(作为对Martin Harris的回复)
代码Martin Harris建议的问题是foreach循环使用FrameworkElement,但是listbox填充了Book类型的对象,它不从FrameworkElement继承,也没有任何其他计算高度的方法.ListBoxItem的根元素是一个网格,所以也许可以检索这个网格,但我不知道该怎么做?
是否有任何方法可以获得为表示列表框项而创建的实际UI元素?
编辑
我发现这个Q/A似乎是我需要的...... ItemContainerGenerator
如何编写一个函数,可以将带有HTML标记的字符串剪切为N长度的字符串,而不会在执行此操作时破坏HTML标记.
返回的字符串不需要长度为N个字符.它可以在N长字符串边缘的标签之前或之后剪切它.
Visit <a href="www.htz.hr">Croatia</a> this summer.
Run Code Online (Sandbox Code Playgroud)
CutIt(9)
应该回来
Visit
Run Code Online (Sandbox Code Playgroud)
要么
Visit <a href="www.htz.hr">Croatia</a>
Run Code Online (Sandbox Code Playgroud) 这是代码隐藏在文件Page_Load
事件后面的代码:
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
PlaceHolder1.Controls.Add(linkButton);
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
PlaceHolder1.Controls.Add(label);
Run Code Online (Sandbox Code Playgroud)
我想在生成的每个控件之间换行.
通常,MenuStrip上的热键字母带有下划线.(&File,&Open等)在项目中,我正在设计下划线,但不是在运行时.我找不到控制它的属性.有人知道吗?
我一直在网上搜索,我只能找到inettuts-with-cookies,它教会了如何使用Jquery执行拖放然后保存在cookie中.任何人都可以告诉我如何保存到数据库(PHP和MySQL)?我非常需要..
编辑:
首先,我不是php初学者,而是AJAX初学者.这些教程仅适用于1列.有没有人拖放并保存到2或3列的数据库?请>>>
我遵循了这个教程(这里有更多的内容,因为在我的代码中我通过鼠标点击获得一个窗口),用于将窗口作为位图抓取,然后在不同的窗口中渲染该位图.
我的问题:
当窗口最小化或隐藏(SW_HIDE)时,我的屏幕捕获不起作用,因此可以在窗口最小化或隐藏时捕获它吗?
好的,这就是我想做的.我有一个阵列.我想要做的是从第一个索引值的另一个数组.从下面我想要创建和数组:
Array (
[identifier] => ID
[label] => HouseNum
[items] => Array (
[0] => Array (
[ID] => 1
[HouseNum] => 17
[AptNum] =>
[Street] => birch glen dr
[City] => Clifton Park
[State] => NY [Zip5] =>
[EID] => E083223
[RequestDate] => 02/05/09
[Status] => In-Qeue
[DateCompleted] =>
[CompletedBy] =>
[ContactName] => Suzy Q
[ContactNumber] => 555-867-5309
[ContactTime] => 9-9 )
)
);
Run Code Online (Sandbox Code Playgroud)
这将最终看起来像这样:
Array(
[0] => [ID]
[1] => [HouseNum]
[2] => [AptNum]
[3] => [Street]
[4] …
Run Code Online (Sandbox Code Playgroud) 我正在开发一款iPhone应用程序并且希望代表金额($)金额.我不能使用float因为它们会引入一定量的舍入错误.我可以用什么?
我正在考虑定义我自己的Money类,并在内部存储美元和便士作为NSInteger.
@interface Money : NSObject {
//$10.25 is stored as dollas=10 and pennies=25
NSInteger dollars;
NSInteger pennies;
}
Run Code Online (Sandbox Code Playgroud)
另一种可能的表示(更容易添加和乘法)将使用单个NSInteger作为便士.
@interface Money : NSObject {
//$10.25 is stored as pennies=1025
NSInteger pennies;
}
Run Code Online (Sandbox Code Playgroud)
你的想法是什么?我可以使用"BigDecimal"类型吗?
我在应用程序的几个地方使用单例模式,并且clang
在分析代码时出现内存泄漏错误.
static MyClass *_sharedMyClass;
+ (MyClass *)sharedMyClass {
@synchronized(self) {
if (_sharedMyClass == nil)
[[self alloc] init];
}
return _sharedMyClass;
}
// clang error: Object allocated on line 5 is no longer referenced after this point and has a retain count of +1 (object leaked)
Run Code Online (Sandbox Code Playgroud)
我正在使用这些设置scan-build
:
scan-build -v -v -v -V -k xcodebuild
我非常肯定单例中的代码很好 - 毕竟,它与Stack Overflow以及Apple的文档中引用的代码相同 - 但我希望将内存泄漏警告整理出来以便我的扫描 - 建立回报成功.