1

当我手动设置这些 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>

现在发生这种情况: 在此处输入图像描述

我想知道的是如何创建适用于所有 TextBlock 的样式,或者为第一个 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>
4

2 回答 2

1

您可以ListBox通过给它一个 50 的左边距来移动整体。这样TextBlock,包含在 s 中的所有 s 都ListBox将根据需要移动。

于 2013-06-05T15:57:27.250 回答
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();
    }
}
于 2013-06-06T04:05:50.937 回答