我正在开发一个向导应用程序,它有一个带有5个边框的侧面菜单和一个包含应用程序屏幕(用户控件)的内容控件。
边框样式可以向用户提供指示他处于向导步骤的位置。
我写了2个边框样式 - 第一个是默认应用于所有边框的defult样式。 第二个(isFoucusedStyle)需要由适合当前屏幕的边框应用。
例如,当向导显示第一个屏幕时:第一个边框需要使用isFoucusedStyle,其他边框需要使用defult样式。当用户继续下一个屏幕时,第一个边框需要恢复默认样式,第二个边框现在将应用isFoucusedStyle。
我通过xaml在下一个方向的资源下在mainWindow创建页面实例:
xmlns:view="clr-namespace:App.View"
xmlns:ViewModel="clr-namespace:App.ViewModel"
<Window.Resources>
<DataTemplate DataType="{x:Type ViewModel:OpeningViewModel}">
<view:OpeningView/>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModel:PersonalDataViewModel}">
<view:PersonalDataView/>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModel:BusinessDataViewModel}">
<view:BusinessDataView/>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModel:BusinessDataViewModel}">
<view:BusinessDataView/>
</DataTemplate>
我还有一个属性 - 当前页面绑定到ContentControl - 当用户单击“下一页按钮”时,CurrentPage更新并且ContentControl切换到UserControl。
用户控件的边框之间没有任何绑定,在我当前的状态下,边框只是没有任何功能的可视图形。
我该如何实施呢?
由于
答案 0 :(得分:0)
我选择了“isFoucusedStyle”并将其配置为baseOn defultstyle。 我添加了triger到isFoucusedStyle,它在Border.Focusable为true时打开。 我创建了一个可以访问当前页码的转换器。 在每个边界处,我都将可聚焦属性限制在转换器上,并使用合适的页码(由当前边界表示的页码)发送“转换器参数” 转换器正在检查currentPageNumber到converterParameter之间的等效性并返回布尔结果。 结果是打开(或不打开)触发器并设置所需的边框样式。 不管怎样,谢谢。
答案 1 :(得分:0)
首先,我强烈建议您将向导基于NavigationWindow(或包含NavigationFrame),这将为您提供免费的所有后退导航,如果您需要,您可以随时重新设置NavigationWindow的样式以匹配更像向导的向导(参见WPF Wizards)。 NavigationWindow / Frame还为您提供处理页面之间转换的Navigate()方法。
为了处理导航链接(你的五个侧面菜单项),我将每个链接绑定到一个View级别ICommand,它测试我们是否需要已经在CanExecute的正确页面上。然后设置边界就是{Binding CanExecute, Converter={BoolToColorConverter}}
的情况。
在你的情况下,你可以简单地做同样的事情。设置您的命令以检查我们是否具有正确的CurrentPage,并使用转换器将其绑定。