我有一个带有4个按钮的“ ItemsControl”,并且在应用页边距时,第一个按钮看起来并不像我想要的那样。是否可以修改第一个按钮的边距?或者,是否可以访问每个按钮并对其应用不同的属性?谢谢
<ItemsControl ItemsSource="{Binding PercentageList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="{Binding PercentageList.Count}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Margin="5,0,0,0"
Content="{Binding Name}"
CommandParameter="{Binding}"
Style="{StaticResource ButtonStyle}"
Command="{Binding DataContext.SelectedPercentageCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
最终解决方案
<ItemsControl ItemsSource="{Binding PercentageList}"
AlternationCount="{Binding PercentageList.Count}">
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="FrameworkElement.Margin"
Value="5,5,0,5" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="{Binding PercentageList.Count}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}"
CommandParameter="{Binding}"
Style="{StaticResource ButtonStyle}"
Command="{Binding DataContext.SelectedPercentageCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex"
Value="0">
<Setter Property="Margin"
Value="0,5" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 0 :(得分:1)
您可以使用Trigger
来解决此问题。
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}">
<Setter TargetName="myTargetElement" Property="SomeProperty" Value="SomeValue"/>
</DataTrigger>
</DataTemplate.Triggers>
通过这种方法,您可以在DataTemplate
中为第一项自定义属性。
如果您想对每个按钮应用独特的样式,听起来您可能需要在按钮项的视图模型中捕获更多信息。
如果您只是想使所有物体之间的间距均匀,我通常会在物品周围的所有方向上使用半边距,并在ItemsControl
周围使用补码,这样可以消除这些特殊的雪花情况。
答案 1 :(得分:0)
您可以有一个更简单的方法,只需像这样更改边距的应用方式即可:
<Button Margin="2,0,0,2"
Content="{Binding Name}"
CommandParameter="{Binding}"
Style="{StaticResource ButtonStyle}"
Command="{Binding DataContext.SelectedPercentageCommand,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}}}" />