Dikey Ayırıcı nasıl eklenir?


114

Izgaraya dikey bir Ayırıcı eklemek istiyorum, ancak yalnızca yatay olanı bulabiliyorum. Ayırıcının çizgisinin yatay mı yoksa dikey mi olması gerektiğini girebileceğiniz bir Özellik yok mu?

Çok aradım ama buna kısa ve kolay bir çözüm bulamadım.

.Net Framework 4.0 ve Visual Studio Ultimate 2012 kullanıyorum.

Yatay Ayırıcıyı 90 derece döndürmeye çalışırsam, diğer Bileşenlere "kenetlenme" özelliğini kaybeder.

Döndürülen ayırıcı şuna benzer:

<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>

3
sadece bir stil kullanamaz Rectanglemısın?
paul

1
bu çalışıyor, ama istediğim şey değil. ayırıcı bunu yapmak için kontrol olmalıdır. bir yolu olmalı ^^
Martin Weber

Sanırım şu anda Dikdörtgeni beğenmesem de kullanıyorum
Martin Weber

1
Borderçözüm de olabilir ..
Mangesh

Yanıtlar:


193

Bu tam olarak yazarın istediği şeyi yapmalıdır:

<StackPanel Orientation="Horizontal">
    <Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />            
</StackPanel>

Eğer yatay ayırıcı istiyorsanız, değiştirmek Orientationve StackPaneliçin Vertical.


4
Benim durumumda, ayırıcıda yalnızca stile ihtiyaç vardı, onu çevreleyen StackPanel'e değil.
Xtr

Ben her zaman bir RenderTransform. Hatırlamak için düzgün kısayol :)
Ashley Grenon

3
Bir cevap olmalı, bu en iyisi. Neden 3. cevap olarak gösterildiğinden emin değilim!
Tatranskymedved

Yatay ve dikey hem de gayet iyi çalışıyor Menuarasındaki MenuItems de. Menünün yüksekliğine / genişliğine uyması için her zaman güzelce uzanır.
natiiix

50

Bu tam olarak yazarın istediği şey değil, ama yine de çok basit ve tam olarak beklendiği gibi çalışıyor.

Dikdörtgen şu işi yapar:

<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>

2
Bu, UWP'de harika çalışıyor. Daha ince bir çizgiye ihtiyacınız varsa, Kontur rengi yerine Fill'i kullanın ve genişliği 3 olarak ayarlayın: <Rectangle HorizontalAlignment="Stretch" Height="3" Margin="-1,6" Stroke="Black" Fill="White" />
Anthony Nichols

25

Geçmişte burada bulunan stili kullandım

<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}" />

Bunun LayoutTransformyerine dönüşümü ayarlamanız gerekir , RenderTransformböylece dönüşüm Render geçişi sırasında değil Düzen geçişi sırasında gerçekleşir. Düzen geçişi, WPF denetimleri düzenlemeye ve her bir denetimin ne kadar alan kapladığını anlamaya çalışırken oluşur; Oluşturma geçişi, WPF denetimleri oluşturmaya çalışırken düzen geçişinden sonra gerçekleşir.

BuradaLayoutTransform ve RenderTransform burada veya burada arasındaki fark hakkında daha fazla bilgi edinebilirsiniz.


Kulağa harika geliyor. Ancak o kadar da değişmez. Hala vs2012'nin gui tasarımcısındaki kontrolleri yerleştiremiyorum. Belki vs2012'de bir Hata?
Martin Weber

@MartinWeber VS'de kontrolü "yerleştirmek" ile ne demek istediğinizden emin değilim. Ayırıcınız ne tür bir panelde barındırılıyor? Bir buysa DockPanel, ayarlamak mümkün olmalıdır DockPanel.Docksenin üzerinde Separatorne yan siz durdurana demirledi isterler. WPF ile, kontrolü barındıran panel genellikle kontrolün konumunu ve hatta bazen varsayılan boyutunu belirler. WPF'nin düzenlerinde yeniyseniz, bu makaleyi okumanızı tavsiye ederim: WPF Düzenleri - Görsel Bir Hızlı Başlangıç
Rachel

Bağlantı için teşekkürler! Bunu okuyacağım. Evet, WPF'de yeniyim. "Yerleştirme" ile kastettiğim, bir kontrolü diğerinin yanına sürüklediğimde bir satırdaki tüm kontrollerin aslında bir satırda olması için kırmızı bir çizgi alıyorum. vs2012'den sadece bir yardımcı. Ayırıcıyı döndürdüğümde artık bu satırları alamıyorum.
Martin Weber

1
@MartinWeber Üzgünüm size daha fazla yardımcı olamam - VS2010 kullanıyorum ve normalde sürükle / bırak tasarımcısını kullanmıyorum çünkü çoğu zaman gereksiz buluyorum ve XMAL karmaşasını sürdürmeyi sevmiyorum :) Sen Bu soru burada daha fazla dikey ayırıcı nasıl odaklanmış gibi görünüyor muhtemelen daha şanslı Visual Studio tasarımcı sorunu için özel olarak yeni bir soru oluşturma olurdu
Rachel

İpuçları için teşekkür ederim. XAML'yi Tasarımcı olmadan deneyeceğim ve bazı Eğitimleri okuyacağım. Belki bazı şeyleri daha iyi anlarsam sorunu kendim çözerim;)
Martin Weber

11

"Hat" kontrolünü kullanmayı seviyorum. Ayırıcının nerede başlayıp nerede bittiği konusunda size tam kontrol sağlar. Tam olarak bir ayırıcı olmasa da, özellikle bir StackPanel'de aynı şekilde çalışır.

Hat kontrolü de bir ızgara içinde çalışır. StackPanel'i kullanmayı tercih ediyorum çünkü çakışan farklı kontroller konusunda endişelenmenize gerek yok.

<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 başlangıç ​​konumu (dikey bir çizgi için 0 olmalıdır)

X2 = x bitiş konumu (dikey bir çizgi için X1 = X2)

Y1 = y başlangıç ​​konumu (dikey bir çizgi için 0 olmalıdır)

Y2 = y bitiş konumu (Y2 = istenen satır yüksekliği)

Dikey çizginin herhangi bir tarafına dolgu eklemek için "kenar boşluğu" kullanıyorum. Bu örnekte, dikey çizginin solunda 5 piksel ve sağında 10 piksel vardır.

Çizgi kontrolü, çizginin başlangıç ​​ve bitişinin x ve y koordinatlarını seçmenize izin verdiğinden, bunu aradaki herhangi bir açıda yatay çizgiler ve çizgiler için de kullanabilirsiniz.


2

Bu, hiçbir işlevsellik ve tüm görsel efekt olmadan yapmanın çok basit bir yoludur.

Bir ızgara kullanın ve sadece özelleştirin.

<Grid Background="DodgerBlue" Height="250" Width="1" VerticalAlignment="Center" Margin="5,0,5,0"/>

Bunu yapmanın başka bir yolu.


2
Mükemmel!!!! Bu şekilde çözdüm, ama aynı fikir: <Grid HorizontalAlignment="Stretch" Height="1" Margin="0,10" Background="Black"/>
Anthony Nichols

2

Dikey ayırıcı

<Rectangle VerticalAlignment="Stretch" Fill="Blue" Width="1"/>

yatay ayırıcı

<Rectangle HorizontalAlignment="Stretch" Fill="Blue" Height="4"/>

0

Gönderen http://social.msdn.microsoft.com/Forums/vstudio/en-US/12ead5d4-1d57-4dbb-ba81-bc13084ba370/how-can-i-add-a-line-as-a-visual-separator -içerik-denetimi-benzeri-ızgara? forum = wpf :

Bu örneği deneyin ve ihtiyaçlarınıza uygun olup olmadığına bakın, bunun üç ana yönü vardır.

  1. Line.Stretch dolduracak şekilde ayarlandı.

  2. Yatay çizgiler için, çizginin VerticalAlignment öğesi Alt, Dikey Çizgiler için ise HorizontalAlignment Sağ olarak ayarlanır.

  3. Daha sonra satıra kaç satır veya sütunun yayılacağını söylememiz gerekir, bu, RowDefinitions veya ColumnDefintions count özelliğine bağlanarak yapılır.



        <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}"/>  
    


0
<Style x:Key="MySeparatorStyle" TargetType="{x:Type Separator}">
                <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
                <Setter Property="Margin" Value="10,0,10,0"/>
                <Setter Property="Focusable" Value="false"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Separator}">
                            <Border 
                                  BorderBrush="{TemplateBinding BorderBrush}" 
                                  BorderThickness="{TemplateBinding BorderThickness}" 
                                  Background="{TemplateBinding Background}" 
                                  Height="20" 
                                  Width="3" 
                                  SnapsToDevicePixels="true"/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

kullanım

<StackPanel  Orientation="Horizontal"  >
       <TextBlock>name</TextBlock>
           <Separator Style="{StaticResource MySeparatorStyle}" ></Separator>
       <Button>preview</Button>
 </StackPanel>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.