2013-06-05 2 views
1

Когда я вручную установил эти текстовые блоки, я смог их легко разглядеть, изменив левое поле на -50, за исключением первого, который получил значение 0 (ноль). enter image description hereКак стилизовать вращающиеся текстовые блоки ближе друг к другу?

Теперь я получаю текстовые блоки, заполненные привязкой, поэтому, когда я применяю стиль, это происходит со всеми 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> 

Теперь это происходит: enter image description here

Что мне интересно, как я могу создать либо стиль, который работает для всех 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

Я просто пробовал то, что, как я думал, было бы достойным решением для этого: перевести преобразование на -90, а затем преобразовать визуализацию на 45 с началом преобразования рендеринга в 0,1. Однако WPF по какой-то причине обрезается, даже с ClipToBounds = false. –

+0

Я заметил, что – Hank

ответ

1

Вы можете просто переместить всю ListBox, придав ему левый край 50. Таким образом, все TextBlock s, которые содержатся в ListBox будут сдвигаются по желанию.

+0

Это подталкивает его, но он все еще обрезает перед собой ListBox. – Hank

+0

@Hank Я подозревал, что это может произойти. Ваш подход к конвертеру кажется таким, каким он хочет. Хотя, я полагаю, вы могли бы сделать его более универсальным, используя «AlternationIndex» из «ListBox», чтобы выборочно применять маржи только к элементам с индексом> 0. Таким образом, ваш конвертер будет работать и для других типов объектов. –

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(); 
    } 
} 
Смежные вопросы