好的,我知道在DataBinding中你可以很容易地定位第一个或最后一个绑定项,但我想知道是否有任何方法可以隐式地为Panel的子类中的第一个和最后一个项设置样式(例如,不添加任何标识这是第一个或最后一个。我只想使用序数位置。)
例如,我有这个......
<UniformGrid Rows="1">
<RadioButton Content="First" />
<RadioButton Content="Middle" />
<RadioButton Content="Another Middle" />
<RadioButton Content="Last" />
</UniformGrid>
...我希望在第一个项目中定位样式,在最后一个项目中定位第二个样式。
那就是说,我知道我可以......
为第一个和最后一个项目添加显式样式,或
向第一个和最后一个项添加显式附加属性,并在样式触发器中使用它。 (这是我倾向的方式。)
...但是,我希望避免这两种情况,并使用隐式样式进行纯XAML。
那么,可以吗?
更新:
目前,我最终只是采用了通用附加属性方法。我创建了一个名为UIHelper.Position
的AP,其值为First,Last和Default。然后我们在模板中的触发器中引用它并相应地设置样式。
它仍然要求我们使用附加属性“标记”控件,但它会让我们超越驼峰,并避免必须使用多个模板创建多个样式。 (我们的模板内部使用了CornerRadius,它不是模板化控件的属性,所以我们不能简单地将它设置为样式。它必须在触发器中完成。)
但是,如果有人知道如何在不诉诸附属财产的情况下这样做,请随时回答以下问题。
答案 0 :(得分:0)
立即想到的是使用模板选择器。您可能会尝试找到它来评估它所在的集合中的对象位置,并以此为基础选择模板。
If myCollection.IndexOf(myObj) = 0 Or myCollection.IndexOf(myObj) = myCollection.Count Then
Return TryCast(container.FindResource("FirstLastTemplate"), DataTemplate)
Else
Return TryCast(container.FindResource("MiddleTemplate"), DataTemplate)
End If
没有对它进行测试,但似乎它会起作用。如果您正在使用MVVM,则可以通过容器访问ViewModel(我认为)。