具有可选项的透明WPF列表框
本文关键字:WPF 列表 透明 可选项 | 更新日期: 2023-09-27 18:01:41
谁能建议我如何实现一个WPF ListBox,(有效地)有一个透明/点击测试不可见的背景,但其项目仍然是点击测试可见?
换句话说,我希望能够通过ListBox的背景来点击它下面的控件,但仍然能够选择ListBox的项目。
我有一个ListBox使用自定义布局面板(它是一个ListBox,因为项目需要是可选择的)。但是,我需要将这个面板叠加在其他控件的顶部,使它们仍然可以正常使用。我尝试了Background="Transparent"
和IsHitTestVisible="False"
的各种组合,但我怀疑我可能在错误的行…
希望这是有意义的-我是新的WPF,所以任何指导将非常感激!谢谢。
尝试将listitemcontainer和ListBox本身的背景设置为"{x:Null} "。
Transparent仍然是可命中测试的,这就是为什么你仍然在进行命中测试。
编辑
我在一个示例上运行WPF检查器,发现默认列表框模板中的ScrollViewer导致鼠标点击停留在列表框中。
下面是一个不包含ScrollViewer的ListBox控件模板。它确实允许鼠标通过列表框后面的文本框,但仍然允许用户在列表框中选择项目。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Window.Resources>
<SolidColorBrush x:Key="ListBorder" Color="#828790"/>
<Style x:Key="ListBoxStyle1" TargetType="{x:Type ListBox}">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListBorder}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBox}">
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true">
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</Trigger>
<Trigger Property="IsGrouping" Value="true">
<Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid Width="100">
<TextBox TextWrapping="Wrap">I'm in the background. I'm in the background. I'm in the backgroun.</TextBox>
<ListBox Background="{x:Null}" Style="{StaticResource ListBoxStyle1}">
<ListBoxItem Margin="10" Background="#999">Hello</ListBoxItem>
<ListBoxItem Margin="10" Background="#999">Hello</ListBoxItem>
<ListBoxItem Margin="10" Background="#999">Hello</ListBoxItem>
<ListBoxItem Margin="10" Background="#999">Hello</ListBoxItem>
</ListBox>
</Grid>
</Window>