我想在900px容器中均匀地拉伸6个导航项目,两者之间有一个均匀的空白区域.例如...
---| 900px Container |---
---| HOME ABOUT BASIC SERVICES SPECIALTY SERVICES OUR STAFF CONTACT US |---
Run Code Online (Sandbox Code Playgroud)
目前,我能找到的最好的方法是:
nav ul {
width: 900px;
margin: 0 auto;
}
nav li {
line-height: 87px;
float: left;
text-align: center;
width: 150px;
}
Run Code Online (Sandbox Code Playgroud)
这个问题有两个问题.首先,它并不能真正证明它,而是将li标签均匀地分布在ul标签中..在"HOME"或"ABOUT"等较小的菜单项之间创建不均匀的空白区域,在"BASIC SERVICES"之类的较大菜单项之间创建不均匀的空白区域.
第二个问题是,如果导航项大于150px(即SPECIALTY SERVICES),布局会中断 - 即使整个导航的空间足够多.
有人能为我解决这个问题吗?我一直在网上搜索解决方案,而且它们似乎都很简短.仅在可能的情况下使用CSS/HTML ...
谢谢!
更新(2013年7月29日):使用table-cell是实现此布局的最佳现代方式.请参阅下面的felix的答案.该table cell属性目前在94%的浏览器上运行.你将不得不做一些关于IE7及以下的事情,但否则应该没问题.
更新(2013年7月30日):不幸的是,如果您将此布局与媒体查询相结合,则会出现影响此问题的webkit错误.现在你必须避免更改'display'属性. 请参阅Webkit Bug.
更新(2014年7月25日):现在有一个更好的解决方案,现在涉及text-align:justify.使用它更简单,您将避免Webkit错误.
我必须在Angular 2环境中使用(大量)现有代码.该代码广泛使用AngularJS 1.x 中的$timeout服务.与代码中使用的各种其他AngularJS 1.x服务相反,我很难找到有关服务的Angular 2等效信息$timeout.
该角文档似乎并没有包含服务提及任何与timeout在其名称-something.文章从AngularJS升级确实提到了我面临的情景:
也许您想要访问AngularJS的内置服务,如
$location或$timeout.
遗憾的是,本文并未实际解释如何访问这些特定服务,因为后续示例HeroesService假定服务没有AngularJS 1.x提供的任何依赖项.
文章如这一个建议使用本机的setTimeout功能不辜负的功能$timeout服务,无论是.
如何$timeout在Angular 2环境中重现功能?
编辑:正如在答案中已经注意到的,setTimeout当使用Angular 2时,本机函数的缺点是无关紧要的.在这种情况下,如果我$q从AngularJS 1.x中获得了完整,我可以$timeout像这样大致复制函数:
function $timeout(fn, delay) {
var result = $q.defer();
setTimeout(function () {
$q.when(fn()).then(function (v) {
result.resolve(v);
});
}, delay);
return result.promise;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用具有键盘快捷键的菜单项创建可本地化的WPF菜单栏 - 而不是加速键/助记符(通常显示为可以按下以在菜单已打开时直接选择菜单项的带下划线的字符),但键盘快捷键(通常是Ctrl+的组合another key)在菜单项标题旁边右对齐显示.
我正在为我的应用程序使用MVVM模式,这意味着我尽可能避免在代码隐藏中放置任何代码并让我的视图模型(我分配给DataContext属性)提供我的视图中控件使用的ICommand接口的实现.
作为重现问题的基础,这里有一些应用程序的最小源代码,如下所述:
Window1.xaml
<Window x:Class="MenuShortcutTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MenuShortcutTest" Height="300" Width="300">
<Menu>
<MenuItem Header="{Binding MenuHeader}">
<MenuItem Header="{Binding DoSomethingHeader}" Command="{Binding DoSomething}"/>
</MenuItem>
</Menu>
</Window>
Run Code Online (Sandbox Code Playgroud)
Window1.xaml.cs
using System;
using System.Windows;
namespace MenuShortcutTest
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
}
Run Code Online (Sandbox Code Playgroud)
MainViewModel.cs
using System;
using System.Windows;
using System.Windows.Input;
namespace MenuShortcutTest
{
public class MainViewModel
{
public string MenuHeader …Run Code Online (Sandbox Code Playgroud) 我有一堆*.java源文件,包含各种包中的类.我试图将所有这些文件导入Eclipse项目,但Eclipse总是将它们放在默认包中.
如何告诉Eclipse将每个文件放在相应的软件包子目录中,这样我就不必手动创建所有各种软件包了?
我已尝试从文件系统功能导入以及将文件复制到项目中,所有这些都将文件放在default包中,而不是在package每个文件顶部的语句中明确说明的那些文件.
相关的SO问题仅涉及项目src目录层次结构之外的引用包,在合适的包目录中手动创建文件,缺少import语句或批量重命名包,但似乎并未讨论此问题.
更新:根据评论中的要求,以下是一些示例文件:
Test1.java
package some.random.pkg;
public class Test1 {
}
Run Code Online (Sandbox Code Playgroud)
Test2.java
package some.other.pkg;
public class Test2 {
}
Run Code Online (Sandbox Code Playgroud)
Test3.java
package yet.another.pkg;
public class Test3 {
}
Run Code Online (Sandbox Code Playgroud)
将它们全部放在同一目录中,然后尝试将它们导入Eclipse中的Java项目,而无需手动创建各种包的目录.
更新2:为了澄清规模,假设每周实际上有大约100个这样的文件(当然,内容更多;-)),这就是为什么我在寻找自动化解决方案.
事件设置器不能用于主题资源字典中包含的样式.这是因为运行时的主题资源字典通常是松散的二进制XAML(BAML)文件,并且没有定义任何范围,其中定义处理程序的后续代码隐藏可以存在.
这个SO问题的第一个答案证实了这一点,该问题指出:
资源xaml不能有文件后面的代码,它们通常被称为"松散的xaml".您可以在msdn中了解有关EventSetter的内容.
但是,我还不了解事件设定者的限制.我尝试使用代码隐藏文件作为资源字典.我为在所述资源字典中的样式中定义的模板中包含的控件事件分配了一个事件处理程序 - 并且它起作用.
另一方面,将事件设置器添加到同一资源字典中的样式会导致异常.
我是否遇到了碰巧工作的特殊情况?
或者在模板中设置事件处理程序始终有效,但如果是这样,那么为什么我不能在同一资源字典中的样式中使用事件设置器?
我的问题归结为:
MSDN声明主题资源字典通常是松散的二进制XAML 究竟是什么意思- 在什么情况下究竟是什么时候?
当我使用索引器初始化数组和访问元素时,这很好用:
object[] temp = new object[5];
temp[0] = "bar";
Run Code Online (Sandbox Code Playgroud)
现在我希望同样适用于a List<T>,因为你可以通过将容量传递给构造函数来初始化它:
List<object> temp = new List<object>(5);
temp[0] = "bar";
Run Code Online (Sandbox Code Playgroud)
但是,最后一行会引发以下异常:
指数超出范围.必须是非负数且小于集合的大小
为什么这种情况发生在List<T>类型上,而不是阵列?由于数组只是CLR集合的低级抽象,那么为什么会发生这种异常呢?
我正在内部机器上设置Apache 2.4.6服务器以进行测试.Apache服务器应该做的事情之一是作为localhost上的另一个服务器的反向代理:3030.
localhost:3030上的服务器在其第一个路径级别上需要一个数据集名称中的一个(目前,该集合仅包含数据集experimental,但稍后将添加更多数据集),因此我试图将其传递给请求的路径.
在我的vhost中,这有效:
<Location /experimental/>
ProxyPass http://localhost:3030/experimental/
ProxyPassReverse /
</Location>
Run Code Online (Sandbox Code Playgroud)
对于其他数据集,我可以复制它并替换experimental为其他数据集名称.显然,这会导致大量代码重复/冗余,这既是错误的根源,也是维护恐怖.
因此,我希望变得更灵活,并在一个这样的块中处理几个数据集.使用该LocationMatch指令应该可以实现.
正如本评论和本页所示,我需要在块内使用时替换.从本质上讲,文档陈述相同:ProxyPass ProxyPassMatchLocationMatch
在LocationMatch部分中也会出现相同的情况,但是ProxyPass不会解释regexp,因此在这种情况下需要使用ProxyPassMatch.
该LocationMatch文档解释:
从2.4.8开始,命名组和反向引用被捕获并写入环境,其对应的名称前缀为"MATCH_",大写.这允许从表达式和模块(如mod_rewrite)中引用URL元素.为了防止混淆,忽略编号(未命名)的反向引用.请改用命名组.
该信息仅在Apache 2.4.8中有效,这可能是以下原因导致我的2.4.6安装不起作用的原因:
<LocationMatch /(?<dataset>experimental)/>
ProxyPassMatch http://localhost:3030/%{env:MATCH_DATASET}/
ProxyPassReverse /
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
另一方面,这个页面和那个帖子暗示数字组索引($1)可以使用(因为帮助文本只有httpd 2.4.8有效,我怀疑/希望是数字参考在2.4.8之前工作(?)
无论如何,我试过这个:
<LocationMatch "/(experimental)/">
ProxyPassMatch http://localhost:3030/$1/
ProxyPassReverse /
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
但根据日志,内部调用将调用http://localhost:3030/$1/而不是http://localhost:3030/experimental/在请求experimentalvhost URL上的路径时调用.
该ProxyPassMatch文档只能说:
在LocationMatch部分中使用时,将省略第一个参数,并从LocationMatch获取正则表达式.
但是,该文本并没有提供如何组合LocationMatch …
tl; dr:我想重用预定义WPF面板的现有布局逻辑来实现自定义WPF面板类.这个问题包含四种不同的尝试来解决这个问题,每个尝试都有不同的缺点,因而有不同的失败点.此外,可以进一步找到一个小测试用例.
问题是:我如何正确实现这一目标
我正在尝试编写自定义WPF 面板.对于这个面板类,我想坚持推荐的开发实践并维护一个干净的API和内部实现.具体地说,这意味着:
至于目前,我将密切关注现有的布局,我想重新使用另一个面板的布局代码(而不是再次编写布局代码,如此处所示).为了举个例子,我将基于解释DockPanel,虽然我想知道如何做到这一点,基于任何一种Panel.
为了重用布局逻辑,我打算DockPanel在我的面板中添加一个可视子项,然后保存并布局我的面板的逻辑子项.
我已经尝试了三种不同的想法来解决这个问题,并且在评论中提出了另一个想法,但到目前为止,每个想法都在不同的点上失败了:
1)在自定义面板的控件模板中引入内部布局面板
这似乎是最优雅的解决方案 - 这样,自定义面板的控制面板可以使用ItemsControl其ItemsPanel属性使用a DockPanel,其ItemsSource属性绑定到自定义面板的Children属性.
不幸的是,Panel不继承Control,因此没有Template属性,也没有对控件模板的功能支持.
另一方面,Children属性是由引入的Panel,因此不存在Control,我觉得打破预期的继承层次结构并创建一个实际上是a Control但不是a 的面板可能会被认为是hacky Panel.
2)提供我的面板的子列表,该列表仅仅是内部面板的子列表的包装器
这样的课程如下所示.我已经子类UIElementCollection在我的面板类,并从一个重写版本返回它CreateUIElementCollection的方法.(我只复制了这里实际调用的方法;我已经实现了其他方法来抛出一个NotImplementedException,所以我确信没有调用其他可覆盖的成员.)
using System;
using System.Windows;
using System.Windows.Controls; …Run Code Online (Sandbox Code Playgroud) 我正在寻找与语言无关(至少在某些范围内)源代码生成的System.CodeDom命名空间,并且我发现了一些阻止使用的信息CodeDom.
我认为这篇早期博客文章中描述的一些遗漏现在已经修复,而且CodeDom似乎没有提供创建switch语句的方法的事实仍然允许 - 性能较差? - 没有弄乱生成类型的公共接口的变通方法.这同样适用于自动C#属性和集合初始值设定项.
但是,其他遗漏实际上无法解决,例如无法创建终结器,无法声明扩展方法,或者缺乏对通用引用类型约束的直接支持.
请注意,CodeSnippetTypeMember通过任何其他方式使用或注入文字源代码片段的建议解决方案并不令人满意,因为它们不是与语言无关的 - 从而消除了整个使用点CodeDom而不是String.Format文字代码片段.
最后,甚至在这个SO问题中建议"CodeDom是失败的,表达树(或者更确切地说是"语句"树)是前进的方式" - 尽管没有任何解释如何从表达式树中实际获取任何源代码(除了不能用表达式树声明类的限制之外.
CodeDom仍然是生成源代码的首选方法,还是当前的BCL提供了一个我想不到的名称的任何模糊替换?
我试图将PNG图形嵌入到DLL中并将其作为一个加载到Image控件中BitmapImage.但是,WPF不断抛出异常,说无法找到资源.
首先,一些最小的示例代码和重现问题的步骤:
使用空主窗口创建名为ImageResTest的WPF项目(可以将默认命名空间设置为ImageResTest).主窗口的代码隐藏文件应如下所示:
using System;
using System.Windows;
using System.Windows.Controls;
namespace ImageResTest
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
var obj = new MyData.SomeStuff.MyClass();
this.Content = obj.Img;
}
}
}
Run Code Online (Sandbox Code Playgroud)创建一个名为ImageResTestLib的类库(您可以将默认命名空间设置为ImageResTest,如上所述,因此此处讨论的所有内容都位于相同的根命名空间中).
MyData/SomeStuff/Resources.在该SomeStuff文件夹中,添加以下文件MyClass.cs:
using System;
using System.Windows;
using System.Windows.Controls; …Run Code Online (Sandbox Code Playgroud)wpf ×4
.net ×2
c# ×2
angular ×1
apache ×1
arrays ×1
code-behind ×1
codedom ×1
css ×1
eclipse ×1
eventsetter ×1
html ×1
javascript ×1
justify ×1
key-bindings ×1
layoutpanels ×1
list ×1
menuitem ×1
navigation ×1
package ×1
panel ×1
proxypass ×1
resources ×1
styles ×1
timeout ×1