【发布时间】:2015-04-17 18:47:13
【问题描述】:
我需要根据元素的 DataContext/Binding 类型而不是 FrameworkElement 本身的类型来应用行为/样式 -
我正在寻找的是一些等价物 -
<Style TargetType={typeof(DataContext) is SomeSelectableType}>
<Setter Property="cal:Message.Attach" Value="[Event PreviewMouseLeftButtonDown]=[Action OnSelect]"/>
</Style>
或
<Style TargetType={typeof(DataContext) is SelectableObject}>
<DataTrigger Binding="IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Red"/>
</DataTrigger>
</Style>
【问题讨论】:
-
在这种情况下,我唯一能想到的就是一种通过 DataTemplateSelector 设置 DataTemplate 的方法,您可以根据项目中的已知类型捕获数据上下文“类型”。它还涉及使用转换器,此时您可以说返回这种样式。 stackoverflow.com/questions/12060761/… codeproject.com/Articles/18777/Routed-Template-Selection-in-WPF 将涉及这两者。 TargetType 也可以通过编程方式确定,但并不常见。
-
是否有很多您希望应用的自定义行为/样式?我听起来这可能是根据您绑定的各种类型使用多个视图的绝佳机会;如果您只是追求一些简单的属性,这可能有点过头了。如果这听起来可能有用,我可以在答案中举一个例子。
-
@Chris:看看你的例子肯定会有所帮助。谢谢。我还更新了我的问题,以更好地解释我的尝试。
标签: c# wpf mvvm prism caliburn.micro