当我手动设置这些TextBlocks时,我可以通过将左边距改为-50来很好地将它们分开,除了第一个设置为0(零)。
我现在通过绑定填充TextBlocks,所以当我应用样式时,它会发生在所有TextBlocks上。
<Style x:Key="RotatedText" TargetType="TextBlock">
<Setter Property="LayoutTransform">
<Setter.Value>
<RotateTransform Angle="-45" />
</Setter.Value>
</Setter>
<Setter Property="Width" Value="130"/>
<Setter Property="Margin" Value="-50,0,0,0"/>
</Style>
现在发生这种情况:
我想知道的是我如何创建一个适用于所有TextBlocks的样式,或者为第一个TextBlock定义一个单独的样式,为另外一个定义另一个样式。
<ListBox x:Name="lstModules" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Modules}" BorderBrush="{x:Null}" Background="{x:Null}" BorderThickness="0">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" CanVerticallyScroll="False" CanHorizontallyScroll="False"></StackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Style="{StaticResource ListViewItemRotatedText}" Text="{Binding ModuleName}"></TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:1)
你可以通过给它左边距50来移动整个ListBox
。这样,TextBlock
中包含的所有ListBox
都会根据需要移动。< / p>
答案 1 :(得分:0)
我最终使用IValueConverter来分析项目,看它是否是列表中的第一项。
<Style.Triggers>
<DataTrigger Binding="{Binding ModuleName, Converter={StaticResource firstItemConvertion}}" Value="true">
<Setter Property="Margin" Value="-60,0,0,0" />
</DataTrigger>
</Style.Triggers>
public class FirstItemConverter : IValueConverter
{
public object Convert(object obj, Type type, object parameter, CultureInfo culture)
{
return (int.Parse((string)parameter)) < ModuleRepository.GetModuleIndexByModuleName(((string)obj));
}
public object ConvertBack(object obj, Type type, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}