0

我正在开发一个向导应用程序,它有一个带有 5 个边框的侧边菜单和一个包含应用程序屏幕(用户控件)的内容控件。

边框样式应该向用户指示他在向导步骤中的位置。

我写了 2 个边框样式 - 第一个是默认样式,默认应用于所有边框。第二个(isFoucusedStyle)需要应用适合当前屏幕的边框。

例如当向导显示第一个屏幕时:第一个边框需要使用isFoucusedStyle,其他的需要使用默认样式。当用户继续下一个屏幕时,第一个边框需要恢复默认样式,第二个边框现在将应用 isFoucusedStyle。

我通过以下方式在资源下的 mainWindow 中通过 xaml 创建页面实例:

     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——当用户单击“下一页按钮”时 CurrentPage 更新并且 ContentControl 切换 UserControl。

边框与用户控件之间没有任何绑定,在我目前的状态下,边框只是没有任何功能的视觉图形。

我该如何实施?

谢谢

4

2 回答 2

0

首先,我强烈建议您将您的向导基于 NavigationWindow(或包含 NavigationFrame),这将免费为您提供所有的前后导航,如果您愿意,您可以随时重新设置 NavigationWindow 的样式以匹配更多的向导,例如界面(请参阅WPF 向导)。NavigationWindow/Frame 还为您提供了处理页面之间转换的 Navigate() 方法。

为了处理导航链接(您的五个侧面菜单项),我将每个链接绑定到一个视图级别的 ICommand,该命令测试我们是否需要在 CanExecute 中的正确页面上。设置边界只是{Binding CanExecute, Converter={BoolToColorConverter}}.

在你的情况下,你可以简单地做同样的事情。设置您的命令以检查我们是否有正确的 CurrentPage,并使用转换器按上述方式绑定。

于 2012-09-24T14:19:48.567 回答
0

I took the "isFoucusedStyle" and config it to baseOn defultstyle. I added triger to isFoucusedStyle which turns on when Border.Focusable is true. I Created a converter which has access to current page number. At every border I bounded focusable property to the converter and sent it "converter parameter" with the suitible page number (page number which represented by current border) The converter is checking for equility between currentPageNumber to converterParameter and returns boolean result. The result is turning on (or not) the trigger and set the needed border style. Thanks anyway.

于 2012-09-24T14:11:24.987 回答