Laden...

[erledigt] Silverlight: Problem mit eigener ComboBox im StackPanel

Erstellt von Delta vor 12 Jahren Letzter Beitrag vor 12 Jahren 878 Views
D
Delta Themenstarter:in
14 Beiträge seit 2011
vor 12 Jahren
[erledigt] Silverlight: Problem mit eigener ComboBox im StackPanel

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

3.430 Beiträge seit 2007
vor 12 Jahren

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

D
Delta Themenstarter:in
14 Beiträge seit 2011
vor 12 Jahren

Hallo und danke für deinen Tipp!

Ich benutze nun das Popup-Control, um die ListBox anzuzeigen und damit klappt es wunderbar! 👍

MfG
Delta