Как добавить вертикальный разделитель?
Я хочу добавить вертикальный разделитель в сетку, но я могу найти только горизонтальный.
Нет ли свойства, в которое вы можете ввести, если линия разделителя должна быть горизонтальной или вертикальной?
Я много искал, но не нашел для этого короткого и легкого решения.
Я использую .NET Framework 4.0 и Visual Studio Ultimate 2012.
Если я попытаюсь повернуть горизонтальный разделитель на 90 градусов, он потеряет способность "состыковать" с другими компонентами.
Вращающийся разделитель выглядит следующим образом:
<Separator HorizontalAlignment="Left" Height="100" Margin="264,26,0,0" VerticalAlignment="Top" Width="100" RenderTransformOrigin="0.5,0.5">
<Separator.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="90"/>
<TranslateTransform/>
</TransformGroup>
</Separator.RenderTransform>
</Separator>
Ответы
Ответ 1
Это должно делать именно то, что хотел автор:
<StackPanel Orientation="Horizontal">
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
</StackPanel>
если вы хотите горизонтальный разделитель, измените Orientation
на StackPanel
на Vertical
.
Ответ 2
Это не совсем то, что просил автор, но все же он очень прост и работает точно так, как ожидалось.
Прямоугольник выполняет задание:
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button >Next</Button>
<Button >Prev</Button>
<Rectangle VerticalAlignment="Stretch" Width="1" Margin="2" Stroke="Black" />
<Button>Filter all</Button>
</StackPanel>
Ответ 3
В прошлом я использовал стиль, найденный здесь
<Style x:Key="VerticalSeparatorStyle"
TargetType="{x:Type Separator}"
BasedOn="{StaticResource {x:Type Separator}}">
<Setter Property="Margin" Value="6,0,6,0"/>
<Setter Property="LayoutTransform">
<Setter.Value>
<TransformGroup>
<TransformGroup.Children>
<TransformCollection>
<RotateTransform Angle="90"/>
</TransformCollection>
</TransformGroup.Children>
</TransformGroup>
</Setter.Value>
</Setter>
</Style>
<Separator Style="{DynamicResource VerticalSeparatorStyle}" />
Вам нужно установить преобразование в LayoutTransform
вместо RenderTransform
чтобы преобразование происходило во время прохода Layout, а не во время прохода Render. Этап Layout происходит, когда WPF пытается расположить элементы управления и выяснить, сколько места занимает каждый элемент управления, в то время как этап Render происходит после этапа размещения, когда WPF пытается отобразить элементы управления.
Вы можете прочитать больше о разнице между LayoutTransform
и RenderTransform
здесь или здесь
Ответ 4
Мне нравится использовать элемент управления "Линия". Он дает вам точный контроль, где начинается и заканчивается разделитель. Хотя это не совсем разделитель, он работает одинаково, особенно в StackPanel.
Управление линиями также работает в сетке. Я предпочитаю использовать StackPanel, потому что вам не нужно беспокоиться о перекрытии разных элементов управления.
<StackPanel Orientation="Horizontal">
<Button Content="Button 1" Height="20" Width="70"/>
<Line X1="0" X2="0" Y1="0" Y2="20" Stroke="Black" StrokeThickness="0.5" Margin="5,0,10,0"/>
<Button Content="Button 2" Height="20" Width="70"/>
</StackPanel>
X1 = начальная позиция x (должна быть 0 для вертикальной линии)
X2 = x конечная позиция (X1 = X2 для вертикальной линии)
Y1 = y исходное положение (должно быть 0 для вертикальной линии)
Y2 = y конечная позиция (Y2 = желаемая высота линии)
Я использую "margin" для добавления отступов на любой стороне вертикальной линии. В этом случае есть 5 пикселей слева и 10 пикселей справа от вертикальной линии.
Так как управление линиями позволяет вам выбирать координаты x и y начала и конца строки, вы также можете использовать ее для горизонтальных линий и линий под любым углом между ними.
Ответ 5
Это очень простой способ сделать это без каких-либо функций и всего визуального эффекта,
Используйте сетку и просто настройте ее.
<Grid Background="DodgerBlue" Height="250" Width="1" VerticalAlignment="Center" Margin="5,0,5,0"/>
Еще один способ сделать это.
Ответ 6
Из http://social.msdn.microsoft.com/Forums/vstudio/en-US/12ead5d4-1d57-4dbb-ba81-bc13084ba370/how-can-i-add-a-line-as-a-visual-separator-to-the-content-control-like-grid?forum=wpf:
Попробуйте этот пример и посмотрите, соответствует ли он вашим потребностям, есть три основных аспекта.
-
Line.Stretch установлен для заполнения.
-
Для горизонтальных линий VerticalAlignment линии устанавливается снизу, а для VerticalLines для параметра HorizontalAlignment установлено значение Right.
-
Затем нам нужно указать строке, сколько строк или столбцов следует использовать, это делается путем привязки к свойству RowDefinitions или ColumnDefintions count.
<Style x:Key="horizontalLineStyle" TargetType="Line" BasedOn="{StaticResource lineStyle}">
<Setter Property="X2" Value="1" />
<Setter Property="VerticalAlignment" Value="Bottom" />
<Setter Property="Grid.ColumnSpan"
Value="{Binding
Path=ColumnDefinitions.Count,
RelativeSource={RelativeSource AncestorType=Grid}}"/>
</Style>
<Style x:Key="verticalLineStyle" TargetType="Line" BasedOn="{StaticResource lineStyle}">
<Setter Property="Y2" Value="1" />
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="Grid.RowSpan"
Value="{Binding
Path=RowDefinitions.Count,
RelativeSource={RelativeSource AncestorType=Grid}}"/>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<Line Grid.Column="0" Style="{StaticResource verticalLineStyle}"/>
<Line Grid.Column="1" Style="{StaticResource verticalLineStyle}"/>
<Line Grid.Column="2" Style="{StaticResource verticalLineStyle}"/>
<Line Grid.Column="3" Style="{StaticResource verticalLineStyle}"/>
<Line Grid.Row="0" Style="{StaticResource horizontalLineStyle}"/>
<Line Grid.Row="1" Style="{StaticResource horizontalLineStyle}"/>
<Line Grid.Row="2" Style="{StaticResource horizontalLineStyle}"/>
<Line Grid.Row="3" Style="{StaticResource horizontalLineStyle}"/>
Ответ 7
Вот как я это сделал:
<TextBlock Margin="0,-2,0,0">|</TextBlock>