我已经习惯了Windows窗体设计器,现在是第一次使用Visual Studio 2010中的WPF设计器。我读到你可以将所需的控件放到窗体上。就我而言,从工具箱中拖出的控件不会像我期望的那样掉落。
两个例子:一些控件应该做一些特殊的事情,比如GridSplitter snapping到掉最近的网格线。但我只是在网格上的位置保持一个灰色矩形,我放下它。 我还使用了Microsoft的WPF功能区控件(在RibbonWindow中),他们说功能区上的dropping a RibbonGroup将它添加到功能区。但是,无论在放弃控件之前我选择了什么控件,我都会将它放在底层网格上。
我一直在网上搜索,但只找到有关运行WPF应用程序时拖放问题的答案。我是否误解了WPF设计师的行为,或者这里是否存在实际问题?
要重现:创建一个新的WPF项目,通过单击Grid的顶部栏将现有的Grid分成两部分。将GridSplitter拖放到其中一个单元格上。我的结果:
答案 0 :(得分:1)
VS2010中的WPF设计师有点笨拙。 Expression Blend对于WYSIWYG设计(或者是另一个当前未发布的VS版本,将Blend集成到VS中)将是更好的选择。 XAML是一个基于网格的布局系统,所以控制你添加将倾向于捕捉它们所在的任何容器的一侧。如果设计师自动应用边框和边距等属性,有时可能不会像你喜欢的那样。如果删除它们并正确设置高度,宽度和对齐属性,分隔符和拆分器应该正确显示。
VS2010有时似乎对你实际添加控件的位置感到困惑。过渡期最简单的解决方案是利用拆分视图并将XAML剪切/粘贴到您添加到您打算进入的内容/容器控件中的控件。
每当我遇到VS2010时,我只需手动编写所有XAML代码。我发现它比使用设计师更快。
答案 1 :(得分:1)
正如您所发现的,Visual Studio WPF设计器的行为与Windows窗体设计器的行为不同。
将元素拖动到设计器或通过双击工具箱中的元素添加元素时,设计器会以默认大小创建它。在你的情况下,大小是100像素×10像素。尝试使用其他控件,你会看到每个控件都有不同的大小。
当您拖动到设计器时,位置取决于释放鼠标左键时鼠标的位置。由于您正在拖入网格(不支持绝对定位),因此通过在网格分割器上设置margin属性来实现该位置。当然,对于您的示例,您不希望设置边距或大小。不幸的是,没有办法改变这种行为,这意味着你必须不断删除边距和宽度 - 高度属性设置。