Szczegóły kontroli użytkownika:
Utworzono kontrolkę listy rozwijanej (jak pole kombi), kliknięcie przycisku strzałki w dół powoduje wyświetlenie listy poniżej pola tekstowego
Ustawiłem właściwość zIndex mojej kontrolki użytkownika
Kwestia:
Przypadek 1: Gdy istnieje inna kontrolka użytkownika (inna niż moja niestandardowa kontrolka użytkownika) i jeśli wyświetlana jest lista rozwijana, inna kontrolka użytkownika ukrywa się za moją kontrolką użytkownika. To jest doskonale OK
Przypadek 2: Istnieją 2 niestandardowe kontrolki użytkownika, jeśli lista jest wyświetlana z pierwszej kontrolki użytkownika, druga kontrolka użytkownika pojawia się na liście. Tutaj mam do czynienia z problemem
XAML mojej kontroli jest jak poniżej
<UserControlx:Class="UserControls.AutoCompleteComboBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Panel.ZIndex="1110" LostFocus="UserControl_LostFocus" Height="Auto">
<Canvas Name="MainCanvas">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="150"></ColumnDefinition>
<ColumnDefinition Width="20"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBox Name="autoTextBox" Height="20" MinWidth="150" Width="Auto" MinHeight="20" Style="{DynamicResource AutoCompleteBox}" BorderThickness="2"
Margin="0,0,0,0" TextWrapping="NoWrap" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Top"/>
<Button Content="6" FontFamily="Marlett" Grid.Row="0" Grid.Column="1" FontSize="15" Margin="0,0,0,0" Height="20" Width="20" HorizontalAlignment="Right" VerticalAlignment="Top" Background="{StaticResource BackgroudBlueBrush}" Click="Button_Click" Padding="0" Cursor="Hand"></Button>
<StackPanel Grid.Row="1" Grid.ColumnSpan="2" >
<ListBox Name="suggestionListBox" SelectionChanged="suggestionListBox_SelectionChanged" MouseDown="suggestionListBox_MouseDown"
Background="LightYellow" SnapsToDevicePixels="True"
Visibility="Collapsed"
MinWidth="150" IsHitTestVisible="True" MinHeight="70" Height="70"
VerticalAlignment="Top" LostFocus="suggestionListBox_LostFocus"/>
</StackPanel>
</Grid>
</Canvas>
</UserControl>
2 odpowiedzi
Twoje podejście nie jest właściwe do prawidłowego zarządzania nakładaniem się kontrolek. Być może stworzysz jakąś sztuczkę za pomocą właściwości ZIndex, ale to nie będzie rozwiązanie.
Jeśli potrzebujesz kontrolki rozwijanej, najlepszym sposobem jest użycie kontrolki Popup i obejrzenie jej. Zasadniczo tworzy kolejne okno bez obramowania, będąc twoim dzieckiem.
Innym podejściem, może prostszym, ale nie dobrym jak Popup, jest użycie Adornera. Może ta jest najbardziej podobna do twojej.
Twoje zdrowie
Czy próbowałeś ustawić ZIndex StackPanel na 1+ zindex kontrolki? Powinno to podnieść część rozwijaną nad innymi instancjami kontroli użytkownika.
Canvas.ZIndex może być używany na StackPanels.
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.