【问题标题】:C# .Net WPF Custom User Control zIndex issue with similar user control具有类似用户控件的 C# .Net WPF 自定义用户控件 zIndex 问题
【发布时间】:2011-07-21 19:48:39
【问题描述】:

用户控制详情:

已创建下拉列表控件(如组合框),单击向下箭头按钮,它会在文本框下方显示一个列表

我已经设置了我的用户控件的 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>

【问题讨论】:

    标签: c# .net wpf wpf-controls


    【解决方案1】:

    您的方法不适合正确管理控件的重叠。也许您可以使用 ZIndex 属性创建一些技巧,但这不是解决方案。

    如果您需要下拉控件,最好的方法是使用 Popup 控件并围绕它进行操作。基本上,它会创建另一个无边框窗口,成为您的子窗口。

    另一种可能更简单但不如 Popup 的方法是使用 Adorner。也许这个是和你最相似的技术。

    干杯

    【讨论】:

    • 感谢您的评论,我也试试这个
    • 感谢您的 cmets。正如您所说,弹出窗口是不错的选择。我刚刚更新了 XAML 以在该弹出窗口中包含弹出窗口和建议列表。感谢大家帮助我。
    【解决方案2】:

    您是否尝试过将 StackPanel 的 ZIndex 设置为 1+ 控件的 zindex?这应该将下拉部分提升到您的用户控件的任何其他实例之上。

    Canvas.ZIndex 可用于 StackPanel。

    【讨论】:

    • 我需要在运行时执行它吗?如果我有一个 WPF 表单,我在上面放置 2 个自定义用户控件 ctlControl1 和 ctlControl2 如何设置它?请建议...
    猜你喜欢
    • 2013-12-05
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2010-12-09
    相关资源
    最近更新 更多