Wpf 当前页面指示器MVVM
在我的WPF应用程序中,我试图使用ContentControl导航到其他“页面”。 到目前为止,我已经在MainViewModel中启动了其他应属于MainViewModel的ViewModel 我使用如下数据模板显示我的视图:Wpf 当前页面指示器MVVM,wpf,mvvm,contentcontrol,Wpf,Mvvm,Contentcontrol,在我的WPF应用程序中,我试图使用ContentControl导航到其他“页面”。 到目前为止,我已经在MainViewModel中启动了其他应属于MainViewModel的ViewModel 我使用如下数据模板显示我的视图: <DataTemplate DataType="{x:Type vm:NewsViewModel}"> <Views:NewsView /> </DataTemplate>
<DataTemplate DataType="{x:Type vm:NewsViewModel}">
<Views:NewsView />
</DataTemplate>
我得到了一个带有TextBlocks的ItemsControl来显示View(models)PageName属性,当我点击它时,它会将“CurrentView”属性设置为相应的ViewModel并显示出来。所以这不是问题所在。。。但是,我现在遇到的问题是如何让textblock显示我的当前视图,例如,我希望它是另一种颜色,然后是其余的textblock,以便用户可以看到哪个视图(模型)处于活动状态
我尝试用带有DataTrigger的textblock样式来实现这一点,但这只接受常量值,有什么想法吗?创建一个
IValueConverter
,如果提供的视图是活动视图,它将返回,并将其添加到DataTrigger的绑定中
样品转换器:
public class IsViewActiveConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value == [activeView];
}
}
样本xaml:
<UserControl.Resources>
<local:IsViewActiveConverter x:Key="IsViewActive"/>
</UserControl.Resources>
<DataTrigger Binding="{Binding View, Converter={StaticResource IsViewActive}}" Value="True">
为什么不将
项目控件
切换到列表框
,因为它具有内置的选择功能?您可以设置它的样式,使其隐藏选择突出显示,并与您的项控件
相同,并使触发器基于ListBoxItem.IsSelected
如果您不想这样做,您可能可以使用将当前ViewModel和活动ViewModel传递给转换器,如果项目相同,转换器将返回True,如果项目不相同,则返回false。第一个建议似乎是最好的!谢谢不是为了偷懒什么的,但是你怎么能水平对齐列表框中的项目呢?@MrZunz你可以覆盖
列表框。ItemsPanel
模板来使用水平堆栈面板
,或者包装面板
(默认为垂直堆栈面板
)好的,我现在知道了。不过,设置所选项目的前景时仍有问题。在google上可以找到足够多的内容,但它们都非常糟糕…@MrZunz通常要设置SelectedItem背景/前景,你需要覆盖列表框的系统颜色。这里有一个例子: