我的XAML
代码会在WPF window
中创建标签。如何让每个Label
的内容包含从ItemSource
呈现的位置?
目前,结果是:AAA
BBB
CC
(它们是3个标签)
我想要的是:1
2
3
(他们是3 label
或0
1
2
,因为索引基于0
)
<ItemsControl Name="m_Header">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Margin="-2,0,0,0"
Width="{Binding Path=Columns[0].ActualWidth, ElementName=m_DataGrid}"
Content="{Binding}" FontSize="15" Foreground="#777" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 0 :(得分:1)
Index
类中没有定义ItemsControl
属性,因此无法显示该值。但是,有一个技巧可以用来获得你想要的东西。如果您的ItemsControl.AlternationCount
属性设置为适当高的数字,那么您可以使用ItemsControl.AlternationIndex
属性为您执行相同的操作:
<ItemsControl AlternationCount="999"><!--Set this as high as you need-->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Margin="-2,0,0,0" Width="{Binding Path=Columns[0].ActualWidth,
ElementName=m_DataGrid}" Content="{(ItemsControl.AlternationIndex), RelativeSource={
RelativeSource TemplatedParent}}" FontSize="15" Foreground="#777" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如果您希望数字以不同的数字开头,则可以添加Converter
,只需在每个数字中添加或减去相关值。
答案 1 :(得分:0)
添加@sheridan答案。
根据您的基础数据源,您可以使用source count属性来设置AlternationCount
<强>模型强>
public class DemoViewModel {
public ObservableCollection<string> Products { get; set; }
}
设置DataContext
public MainWindow() {
InitializeComponent();
var vm = new DemoViewModel();
vm.Products = new ObservableCollection<string> { "elm", "oak", "pine" };
this.DataContext = vm;
}
<强> XAML 强>
<ItemsControl AlternationCount="{Binding Products.Count}"
ItemsSource='{Binding Products}'>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation='Vertical'>
<Label Margin="2" Width='200'
Content="{Binding (ItemsControl.AlternationIndex), RelativeSource={
RelativeSource TemplatedParent}}"
Foreground="#777" />
<TextBlock Text='{Binding}' />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<强>结果
答案 2 :(得分:0)
以上所有代码都很有效:)。
如何将Binding Path=Columns[0]
更改为Binding Path=Columns[index_here]
它位于Width="{Binding Path=Columns[0].ActualWidth, ElementName=m_DataGrid}"