/ / System.Windows.Visibility Zwinięty vs Ukryty - wpf, user-interface, layout, wpf-controls

System.Windows.Visibility Collapsed vs Hidden - wpf, interfejs użytkownika, układ, wpf-controls

Mam kontrolkę z widocznością ustawioną na „Zwinięty” i przycisk ToggleButton, który zmienia widoczność między Visibility.Collapsed i Visibility.Hidden. Według Dokumentacja MSDN nie powinno być miejsca na kontrolęw układzie, gdy widoczność formantu jest ustawiona na „Ułożone”, ale nie ma widocznych różnic między tymi dwoma wyliczeniami, a ponadto widoczność formantu jest początkowo ustawiona na Zwinięty, więc początkowy rysunek formantów nie powinien przydzielać żadnych miejsce na kontrolę.

Czy jest jakaś koncepcja, której brakuje, lub jak mam ją zdobyćelement, który zajmuje miejsce tylko wtedy, gdy jest widoczny? Moim celem końcowym jest, aby elementy sterujące były wyświetlane w warunkach opartych na wyborach użytkownika, które pojawiają się na północ od wspomnianych elementów sterujących z różnymi wyświetlaczami, ze stałymi marginesami między wszystkimi elementami sterującymi.

Fragment XAML:

<StackPanel>
<TextBox Name="hideTest" DataContext="{StaticResource persistentMemoryBridge}"   Text="HIDETEST" Margin="0,327,31,491" Foreground="Black" Background="Orange" Visibility="Collapsed" />
<TextBox DataContext="{StaticResource persistentMemoryBridge}"   Text="{Binding Path=PropertyTest}" Margin="0,386,31,432" Foreground="Black" Background="Yellow"/>
<ToggleButton Name="tbVisibility" Content="Toggle" Click="ToggleButton_Click" Margin="0,445,65,391"></ToggleButton>
</StackPanel>

CodeBehind:

private void ToggleButton_Click(object sender, RoutedEventArgs e) {

switch (hideTest.Visibility) {
case System.Windows.Visibility.Collapsed: {
hideTest.Visibility = Visibility.Hidden;
tbVisibility.Content = "Hidden";
break;
}
case System.Windows.Visibility.Hidden: {
hideTest.Visibility = Visibility.Visible;
tbVisibility.Content = "Visible";
break;
}
case System.Windows.Visibility.Visible: {
hideTest.Visibility = Visibility.Collapsed;
tbVisibility.Content = "Collapsed";
break;
}
}
}

Odpowiedzi:

2 dla odpowiedzi № 1

Kiedy widoczność contol jest włączona Collapsed określ, że jego marginesy nie uczestniczą w układzie (w przeciwieństwie do Hidden stan)

Można łatwo zweryfikować:

<Window x:Class="MarginsRespectForCollapsedTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button Margin="50,50" Visibility="Collapsed">I"m Collapsed</Button>
<Button>I"m Visible!</Button>
</StackPanel>
</Window>

Zgadzam się z HighCore, że XAML naprawdę wyglądatak jak właśnie przeciągnąłeś kontrolki z panelu przybornika. Projektant XAML firmy VS ma tę nieprzyjemną cechę: próbuje sterować pozycją za pomocą marginesów.