C # .Net WPF Custom User Control zIndex проблема с аналогичным пользовательским контролем - PullRequest
0 голосов
/ 21 июля 2011

Подробности управления пользователем:

Создан элемент управления раскрывающегося списка (например, как поле со списком), нажав кнопку со стрелкой вниз, он отображает список под текстовым полем

Я установил свойство zIndex моего пользовательского элемента управления

Проблема:

Случай 1: когда есть другой пользовательский элемент управления (кроме моего пользовательского элемента управления), и если отображается раскрывающийся список, другой элемент управления скрывается за моим пользовательским элементом управления. Это совершенно нормально

Случай 2: имеется 2 пользовательских пользовательских элемента управления, если список отображается из первого пользовательского элемента управления, второй пользовательский элемент управления появляется в списке. Это где я сталкиваюсь с проблемой

XAML моего контроля, как показано ниже

    <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 ]

0 голосов
/ 21 июля 2011

Вы пытались установить ZIndex на StackPanel на 1+ zindex элемента управления?Это должно поднять выпадающую часть над любым другим экземпляром вашего пользовательского элемента управления.

Canvas.ZIndex можно использовать на StackPanels.

0 голосов
/ 21 июля 2011

Ваш подход не является правильным для правильного управления перекрытием элементов управления. Возможно, вы можете создать какой-то трюк, используя свойство ZIndex, но это не будет решением.

Если вам нужен выпадающий элемент управления, лучше всего использовать всплывающий элемент управления и поэкспериментировать с ним. По сути, он создает еще одно окно без границ, будучи вашим ребенком.

Другой подход, возможно, более простой, но не очень хороший, как всплывающее окно, использует Adorner. Возможно, это самый похожий на ваш метод.

Приветствия

...