将边框样式绑定到当前用户控件

时间:2012-09-24 09:45:20

标签: wpf binding border

我正在开发一个向导应用程序,它有一个带有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。

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

我该如何实施呢?

由于

2 个答案:

答案 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,并使用转换器将其绑定。