Prosta (myślę) pozioma linia w WPF?

228

Tworzenie stosunkowo prostego formularza wprowadzania danych i po prostu chcesz oddzielić niektóre sekcje poziomą linią (podobnie jak znacznik HR w HTML), która rozciąga się na całą długość formularza.

Próbowałem tego:

<Line Stretch="Fill" Stroke="Black" X2="1"/>

Ponieważ kontrola nadrzędna nie ma stałej szerokości, linia ta powoduje rozciągnięcie okna do pełnej szerokości ekranu.

Czy istnieje prosty sposób, aby to zrobić bez ustalenia szerokości mojego okna nadrzędnego / okna kontrolnego?

Phil Sandler
źródło
3
Odpowiedź brzmi [tutaj] [1]. Wolę odpowiedź mletterle. [1]: stackoverflow.com/questions/4011571/…
Stacked

Odpowiedzi:

522

Co powiesz na dodanie tego do xaml:

<Separator/>
Adel Hazzah
źródło
9
genialne rozwiązanie i jeden tag!
7
Nie rozumiem, jak to jest rozwiązanie. Dodaję separator i nie widzę żadnej linii. Jaka konfiguracja jest konieczna przy umieszczaniu separatora w standardowym panelu układu, takim jak Siatka, aby wyświetlał się jak reguła pozioma?
jpierson
Zgadzam się, wygląda na to, że to nie działa w przypadku niektórych kontrolek
Justin Pihony,
12
@jpierson Jeśli dodasz go do siatki, prawdopodobnie musisz przypisać go do wiersza i kolumny, jak każda inna kontrolka. W przeciwnym razie prawdopodobnie pojawi się w pierwszym rzędzie / kolumnie, a ty go przegapisz. (Działa poprawnie na StackPanel.)
ANeves
5
Pamiętaj, że <Separator/>czytniki ekranu odczytują je na głos. Jeśli <Separator/>jest używany do oddzielenia grup elementów w interfejsie użytkownika, jest to idealne rozwiązanie. Tam, gdzie użycie linii ma czysto estetyczne przyczyny, sugeruję użycie <Line/>lub <Rectangle/>zamiast tego.
Simon Rozman
77

Miałem ten sam problem i ostatecznie zdecydowałem się użyć elementu Rectangle:

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

Moim zdaniem modyfikacja / kształt jest nieco łatwiejszy niż separator. Oczywiście Separatorjest to bardzo łatwe i schludne rozwiązanie dla prostych separacji :)

Deruijter
źródło
2
Działa w Silverlight 5, podczas Seperatorgdy nie.
ΩmegaMan
14

Użyj granicy wysokości 1 i nie ustawiaj szerokości (tj. Szerokość = auto, wyrównanie w poziomie = rozciąganie, domyślnie)

Ana Betts
źródło
2
Przydaje się to w przypadku separatorów pionowych:<Border Width="1" Margin="2" Background="#8888"/>
Qwertie,
8

Dla każdego, kto miał z tym problem : komentarz Qwertie działał dla mnie dobrze.

<Border Width="1" Margin="2" Background="#8888"/>

To tworzy pionowy separator, który możesz dopasować do swoich potrzeb.

P_Fitz
źródło
3
To draw Horizontal 
************************    
<Rectangle  HorizontalAlignment="Stretch"  VerticalAlignment="Center" Fill="DarkCyan" Height="4"/>

To draw vertical 
*******************
 <Rectangle  HorizontalAlignment="Stretch" VerticalAlignment="Center" Fill="DarkCyan" Height="4" Width="Auto" >
        <Rectangle.RenderTransform>
            <TransformGroup>
                <ScaleTransform/>
                <SkewTransform/>
                <RotateTransform Angle="90"/>
                <TranslateTransform/>
            </TransformGroup>
        </Rectangle.RenderTransform>
    </Rectangle>
Shaiju Mathew
źródło