这个问题旨在提供常见陷阱的解决方案列表,“陷阱”或开发WPF应用程序时的设计问题。这也可以包括适当的设计模式,只要有解释为什么它最好。响应应根据问题类型的常见程度进行投票。以下是规则:
答案 0 :(得分:15)
问题:到目前为止,我看到的主要问题是人们开始使用winform UI模型在WPF中进行编码。
解决方案: WPF不是WinForms / MFC / Win32 因此,请忘记在开发基于Windows的用户界面过去20多天时使用和学习的所有UI方面的假设和规范年。
理解这个平台背后的核心思想非常重要,这个链接 - Major UI Development Breakthroughs in the new WPF platform将提供WPF的深入视图。其中列出了以下几点。突出显示的是我最喜欢的平台功能。
答案 1 :(得分:3)
问题:使用M-V-VM设计模式,我在哪里实例化视图?这是否发生在ViewModel中? SO Question 1,SO Question 2
解决方案:使用M-V-VM模式而不是其他常见模式(如M-V-C)时,WPF开发最有效。倾向于将ViewModel视为处理打开和创建视图以及模型的控制器。在M-V-VM中不是这种情况。视图是应该创建视图的唯一位置。 ViewModels应该对视图一无所知。 SO Answer 1,SO Answer 2
答案 2 :(得分:3)
没有意识到在项目开始时字体渲染有多糟糕,而且客户告诉他们,由于一切看起来模糊不清,他们无法看到它。
答案 3 :(得分:2)
问题/疑问: SO Question
如何公开DependencyProperty 我的用户中的组件 控制用户?有很多 如何暴露正常的例子 通过创建新依赖项来实现属性 属性和绑定,但没有如何 公开一个只读属性,如 FrameworkElement.ActualWidthProperty。
解决方案:您需要在用户控件中公开新的Readonly DependencyProperty,并在包含的“组件”的ActualWidthProperty更新时更新它。这需要使用DependecyPropertyDescriptor来获知发生的更改。 SO Solution
答案 4 :(得分:1)
使数据绑定在ContentControls(Windows,UserControls等)中定义的属性与构成控件内容的元素的属性之间正常工作。例如。假设我有一个看起来像这样的窗口:
<Window x:Name="MyWindow"....>
<TextBlock Text="{Binding Path=PropertyDefinedInMyWindow}" />
</Window>
问题:无论您多久更新一次“PropertyDefinedInMyWindow”,它都不会反映在TextBlock中。 SO Question
解决方案:您需要设置Window的DataContext或告诉绑定属性所在的元素。 SO Solution
答案 5 :(得分:0)
Ivan Towlson在这个主题上做了很好的演讲。大多数信息都在他的幻灯片中,您可以从这里获得: http://hestia.typepad.com/flatlander/2008/08/codecamp-2008-.html
答案 6 :(得分:0)
在视图中使用代码 - 这会让宝宝FSM哭泣。