在 Windows 窗体中,TabControl 的默认行为是,如果选项卡占用太多空间 (MultiLine = false),则将选项卡溢出到可滚动区域。
在 WPF 中实现此行为的最佳方法是什么?
更新
我试图找到一个解决方案TabControl.ItemsPanel,但似乎我放在那里的任何东西都被完全忽略了,所以出于这个原因,我走了一条艰难的路,并从TabControl.Template令人难以置信的开始,如果事实证明我们必须这样做才是正确的做法。
远未完成,我对问题的起始解决方案如下。
<TabControl>
<TabControl.Template>
<ControlTemplate TargetType="{x:Type TabControl}">
<DockPanel>
<ScrollViewer DockPanel.Dock="Top"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Disabled">
<StackPanel Orientation="Horizontal" IsItemsHost="True" />
</ScrollViewer>
<ContentPresenter ContentSource="SelectedContent" />
</DockPanel>
</ControlTemplate>
</TabControl.Template>
<TabItem Header="One">First</TabItem>
<TabItem Header="Two">Second</TabItem>
<TabItem Header="Three">Third</TabItem>
<TabItem Header="Four">Fourth</TabItem>
<TabItem Header="Five">Fifth</TabItem>
</TabControl>
Run Code Online (Sandbox Code Playgroud) 我正在使用EWS并希望从公司的交换中获取全球地址列表.我知道如何检索个人联系人列表.
API文档中的所有示例都涉及更新用户信息,但没有具体说明如何检索它们.
我甚至尝试过以下列出文件夹,但它没有正确的结果.
private static void ListFolder(ExchangeService svc, FolderId parent, int depth) {
string s;
foreach (var v in svc.FindFolders(parent, new FolderView(int.MaxValue))) {
Folder f = v as Folder;
if (f != null) {
s = String.Format("[{0}]", f.DisplayName);
Console.WriteLine(s.PadLeft(s.Length + (depth * 2)));
ListFolder(svc, f.Id, depth + 1);
try {
foreach (Item i in f.FindItems(new ItemView(20))) {
Console.WriteLine(
i.Subject.PadLeft(i.Subject.Length + ((depth + 1) * 2)));
}
} catch (Exception) {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然问题已经提出(如何从Exchange Server获取联系人列表?),但这个问题特别涉及使用EWS获取全局地址列表,而此问题在一般级别上请求建议.
许多页面都有一个搜索框,通常会有覆盖文本"搜索",当一个人聚焦元素时会消失,当焦点丢失时会重新出现.我很想知道人们推荐的最佳策略.
我采用的策略是使用输入元素的焦点/模糊事件并测试内容以确定是否应该更改值.在我的以下示例中,我使用jQuery.举一个例子,我们有一个带有的idof quick-search,当为空时,我在焦点时显示文本"搜索"我删除文本并更新样式,
$(function() {
$("#quick-search").focus(function() {
if (this.value === "Search") {
$(this).removeClass("quick-search-not-focussed");
this.value = "";
}
}).blur(function() {
if (this.value === "") {
$(this).addClass("quick-search-not-focussed");
this.value = "Search";
}
});
})
Run Code Online (Sandbox Code Playgroud)
我的quick-search-not-focussed课程如下:
.quick-search-not-focussed { color: #bbb; }
Run Code Online (Sandbox Code Playgroud)
这对我来说效果很好,因为搜索框只能在输入时提交,因为没有按钮,但是有些场景需要更多输入元素并且输入文本被覆盖,您使用的替代技巧/技术是什么?我个人不喜欢这种方法中使用图像.
我希望构造一个可选择具有时间参数的日期格式.
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd [hh:mm]");
Run Code Online (Sandbox Code Playgroud)
是否也可以构造一个能够解析不同格式的日期格式对象?比如尝试当前的语言环境,然后再回到ISO-8601,或者如果一个失败,我应该写多个日期格式?
更新:回顾这个问题,我可以看到我没有指定多个日期格式的原因是解析字符串,而不是格式化日期,因此格式化日期对象的模糊不是我的问题.如果考虑到这一点,时间部分是否包含在解析字符串中.
我正在开始一个新的Titanium应用程序,并希望使用最佳实践,并避免内存泄漏.我是CommonJS以及Titanium平台的新手.
不幸的是,似乎钛环绕在所有的示例应用程序Ti.include("/lib/module"),而不是新的建议的最佳实践的require("/lib/module").
我担心的是使用CommonJS的内存消耗可能需要.从Titanium中的CommonJS模块文档中可以看出模块将被缓存,这是否意味着如果我访问模块,即使它们超出范围,所有这些功能也会突然停留在内存中?
我已经开始使用以下结构的新应用程序
/ctrl # Model/UI controllers
/lib # libraries (common + 3rd party)
/ui # UI forms
/model # DAL objects for data store
Run Code Online (Sandbox Code Playgroud)
从这里我的主应用程序有一个仪表板样式视图,其结构松散如下:
(function() {
var getMenuItem = require("/ui/main").getMenuItem;
var win = Titanium.UI.createWindow({
title:'Main',
backgroundColor:'#fff'
});
var nav = Ti.UI.iPhone.createNavigationGroup({
window:win
});
var sect;
var data = [];
sect = Ti.UI.createTableViewSection();
data.push(sect);
sect.add(getMenuItem("Customers",
require("/ctrl/account").createCustMainWindow));
sect.add(getMenuItem("Schedules",
require("/ctrl/schedule").createScheduleMainWindow));
sect.add(getMenuItem("Settings"));
var menu = Titanium.UI.createTableView({
style: Ti.UI.iPhone.TableViewStyle.GROUPED,
data:data
});
win.add(menu); …Run Code Online (Sandbox Code Playgroud) 我目前正在通过apache使用AJP代理到tomcat 8.我不想说明为什么我使用的是AJP,但基本的是防火墙外的Apache站点,而tomcat在防火墙内,多个应用程序是虚拟托管的通过一个apache实例.
添加了一个组件到应用程序需要websockets.我知道我们当前的AJP实现不支持websockets,但是我正在寻找其他人已经确认工作的替代方案,即不同的apache模块,我正在使用mod_proxy_ajp.
如果没有已知模块允许它工作,是否有人知道任何正在进行的工作,以增强任何现有模块或新模块?
FWIW我正在使用带有STOMP端点和SockJS的spring4 websocket支持.
我正在尝试将元素渲染到其父面板的边界之外,在这种情况下我正在使用堆栈面板.
<StackPanel ClipToBounds="False" Width="200" Orientation="Horizontal" Height="50"
Background="{DynamicResource TierBackground}">
<Rectangle ClipToBounds="False" VerticalAlignment="Bottom" Width="25" Height="75"
Fill="#FF4D6072" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
设置ClipToBounds似乎没有做任何事情,我首先在它上面Rectangle然后在父面板上尝试它,虽然似乎都没有帮助.
UPDATE
Canvas容器似乎是对该ClipToBounds属性的尊重,但似乎没有其他容器能够尊重这一点.
UPDATE
我已经包含了我想要实现的目标的图像.棕色区域是内部堆栈面板,它们在父堆栈面板内分组,查看灰色框(表示产品定位)如何延伸超过父容器并从上面的层覆盖父产品.
这是通过在父级内部堆叠多个画布来实现的,StackPanel其中子级产品元素的Canvas.Bottom属性设置为0.虽然这确实有效,但这意味着我必须将每个产品元素设置为"左"属性,并且不能自动将布局定位到产品.
StackPanels http://img263.imageshack.us/img263/8682/stackpanels.jpg
我需要在JSP中执行按位测试,但是我一生都无法弄清楚如何使用EL进行测试。
我想做类似的事情:
<c:if test="${(test & testFor) == testFor}">
<h3>Test Passed</h3>
</c:if>
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用普通的JSP语法来做到这一点:
<% if ((test & testFor) == testFor) { %>
<h3>Test Passed</h3>
<% } %>
Run Code Online (Sandbox Code Playgroud) 在JDK 7中,jaxb2-maven-plugin产生一个关于apt被删除的警告,它现在已经在JDK8中,我不知道如何让插件与JDK8一起工作.
警告:计划在下一个主要JDK版本中删除apt工具及其关联的API.这些功能已被javac和标准化的注释处理API javax.annotation.processing和javax.lang.model取代.建议用户迁移到javac的注释处理功能; 有关更多信息,请参阅javac手册页.
我在项目页面上创建了一张票:MJAXB-83.
给定价格点表示为整数美分的整数,即199 = $1.99是否有用于构造MonetaryAmount?的API方法?
一种简单的方法是将金额除以100,但想知道是否有一种API方法.
MonetaryAmount ma = Money.of(199, "NZD").divide(100);
Run Code Online (Sandbox Code Playgroud)