|
|
1
6
您可以使用VisualBrush,这里是一个将背景设置为StackPanel的缩小版本的按钮的快速示例。
编辑:虽然这个解决方案可以复制屏幕上的内容,但是当屏幕上的内容被隐藏或删除时,VisualBrush也会如此。 为了持久化图像,需要将控件呈现为位图。这可以通过renderTargetBitmap完成
|
|
|
2
3
我假设您需要实际的独立窗口,可以在屏幕周围和其他应用程序的窗口之间独立地拖动和放置。(如果这个假设是错误的,并且类似MDI的接口更适合您,请看Rob的答案。) 我将实现一个接受窗口的Expander子类,并且:
它可能被命名为“WindowExpander”,并将其内容属性设置为展开展开时要显示的实际窗口对象。例如,它可以通过以下方式之一使用,具体取决于如何定义窗口:
WindowExpander的实现是一个ToggleButton,其中包含一个显示缩略图的视图框,如下所示:
我想您可能希望实现类似以下的WindowExpander:
上面的代码省略了构建动画的步骤。它也没有被测试过——它只是很快从我的头上写下来的。我希望它对你有用。 工作原理:isexpanded控制窗口的可见性,但当isexpanded更改时,故事板会临时强制窗口在动画运行期间保持足够长的可见时间。在任何给定的时刻,模板中的窗口或ContentPresenter都包含窗口的内容。您可能会说,每当扩展器没有展开(没有窗口)时,内容都会从窗口“被盗”,以便在窗口扩展器中使用。这是通过swapContent方法完成的。它将用VisualBrush绘制的矩形放入窗口,并将窗口的实际内容放入头中,这是ToggleButton上显示的缩略图。 这项技术解决了这样一个事实:VisualBrush不适用于不可见的可视对象,因为“内容”可视对象实际上总是可见的——它始终是窗口的子对象,或是视盒内ContentPresenter的子对象。 因为使用了VisualBrush,缩略图总是提供实时预览。 警告:不要在窗口级别设置DataContext或创建资源。如果你这样做了,当你的内容被“窃取”时,它将没有正确的数据上下文或资源,因此看起来不正确。我的建议是对每个表单使用一个用户控件而不是一个窗口,并让主表单将其包装在一个窗口中,如下图所示:
|
|
|
3
1
如果您是从WPF开始的,那么您计划做的事情可能需要您学习混合以便定义条件和动画,或者深入到动画系统以便理解它并手工编写XAML代码。 在较高的层次上,我想您可以通过将四个“表单”中的每一个定义为用户控件或内容演示者来实现这一点,也许在它们周围有一个边界。
然后,当“表单”处于非活动状态时,使用
若要添加行为以增大最小化窗体,请处理“PreviewMouseDown”事件,并在处理程序中测试窗体的状态。 我发现“5天内学习融合”视频对此很有用,但我承认分享你的困惑;我发现没有一个统一的地方可以系统地教授XAML和WPF,而无需简单地参加第三方培训班或召集导师顾问。在这个时候,培训的第五天是“即将到来”,或者整个事情的关键是Silverlight而不是WPF,这都没有帮助。 但是,这是一个开始,“学习混合”视频可以在这里找到: http://www.microsoft.com/expression/resources/blendtraining/ 你还会看到一个链接,指向一个名为“工具箱”的东西,我还没有尝试过。 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |
|
|
Barta · WPF MVVM不更新视图 1 年前 |
|
|
Denis Ivanov · WPF控件在属性更改时不会更新 1 年前 |
|
|
codymanix · WPF:TextBlock周围可见小边框? 1 年前 |
|
|
Nostromo · 来自背景对象的工具提示 1 年前 |
|
|
Nuvolari · 从可观测集合添加/删除时出现对象处理异常 1 年前 |
|
|
CCarter · 只能在设计器中DependencyObject的DependencyProperty上设置显示“Binding”的WPF ICommand DependencyProperties[重复] 1 年前 |
|
|
Thern · 在UI线程(WPF)上的void方法中调用异步函数 1 年前 |