Hallo!
Ich habe mir eine eigenes ComboBox-Control erstellt, welches bis jetzt auch soweit gut klappt. Wenn ich aber nun mein eigenes Control in ein StackPanel einfüge und sich darunter noch andere Controls befinden, wird die ListBox, die ich über den Button-Klick öffne nicht angezeigt. Packe ich aber eine normale ComboBox in das StackPanel, so wird die Liste ganz normal angezeigt, sprich sie überdeckt die darunterliegenden Controls.
Meine Frage ist nun, ob ihr vielleicht einen Tipp habt, wie in meinem Control die ListBox auch die darunterliegenden Controls in einem StackPanel überdecken kann? Benutze ich mein Control nicht in einem StackPanel, sondern ganz normal auf einem ChildWindow z.B., dann werden die darunterliegenden Controls überdeckt (so wie es sein soll)!
Hier mal der komplette XAML-Code und ein paar Snippets der CS-File meines Controls:
<UserControl x:Class="MyControls.MyControls.DropDownBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="122" >
<StackPanel x:Name="stkpanel" MouseLeftButtonDown="stkpanel_MouseLeftButtonDown" >
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtSelectedItem" Height="22" FontSize="10" Text="" Width="Auto"/>
<Button Content=">" Height="22" Name="btnDropDown" Width="17" FontFamily="Arial" FontSize="8" Click="btnDropDown_Click" IsTabStop="False" HorizontalAlignment="Right" />
</StackPanel>
<ListBox ScrollViewer.VerticalScrollBarVisibility="Visible" x:Name="lstitems" Visibility="Collapsed" SelectionChanged="lstitems_SelectionChanged" Height="Auto" >
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="10" Text="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</UserControl>
private void btnDropDown_Click(object sender, RoutedEventArgs e)
{
if (lstitems.Visibility == Visibility.Visible)
{
lstitems.Visibility = Visibility.Collapsed;
}
else
{
Canvas.SetZIndex(this, 999);
lstitems.SelectedItem = txtSelectedItem.Text;
lstitems.Visibility = Visibility.Visible;
}
this.txtSelectedItem.Focus();
}
private void DropDownBox_Loaded(object sender, RoutedEventArgs e)
{
this.txtSelectedItem.Height = 20;
this.btnDropDown.Height = 20;
this.txtSelectedItem.FontFamily = new System.Windows.Media.FontFamily("Arial");
this.txtSelectedItem.FontSize = 11;
this.lstitems.Height = this.Height - this.txtSelectedItem.Height;
this.txtSelectedItem.Width = this.Width - this.btnDropDown.Width;
}
Vielen Dank schonmal im Voraus für eure Antworten!
MfG
Delta
Hallo Delta,
wieso hast du überhaupt ein Control erstellt das das selbe macht wie eine ComboBox?
Wahrscheinlich reicht es auch wenn du die ComboBox mit Templates / Styles auf deine Bedürfnisse anpasst oder es ableitest und erweiterst.
Falls du es wirklich selbst nachbauen willst dann verwendest du für den Overlay mit den Items besser ein Popup.
Damit wird es dann auch schön die anderen Controls überlappen.
Das mit dem Z-Index setzen beim Canvas ist zwar auch eine Möglichkeit, aber besser und einfacher ist das mit dem Popup-Control
Gruß
Michael
Hallo und danke für deinen Tipp!
Ich benutze nun das Popup-Control, um die ListBox anzuzeigen und damit klappt es wunderbar! 👍
MfG
Delta