WPF自定义控件问题
在WPF中写自定义控件时,会出现一个问题,就是当使用List或者Expander当作跳转界面的菜单栏按钮时,点击空白区域不起作用,只有点击图标或者点击文字才会起作用
这里提供两个解决方案
一、
1、先自定义触发器全局捕获点击
<Expander HorizontalContentAlignment="Stretch" Background="{x:Null}">
<!-- 在Expander上直接捕获点击事件 -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseDown">
<i:InvokeCommandAction
Command="{Binding DataContext.HeaderClickCommand, ElementName=list}"
CommandParameter="{Binding}" />
</i:Interaction.Triggers>
</i:Interaction.Triggers>
<Expander.Header>
<StackPanel Orientation="Horizontal">
<md:PackIcon Width="24" Height="24" Kind="{Binding Icon}" />
<TextBlock Margin="15,0,0,0" Text="{Binding Title}" FontSize="15"/>
</StackPanel>
</Expander.Header>
<Expander.Content>
<ItemsControl ItemsSource="{Binding AsideMenuChilds}" />
</Expander.Content>
</Expander>
2、拦截默认行为
private void OnHeaderClicked(AsideMenuControl menuItem)
{
// 如果无子项,则跳转并阻止Expander展开
if (menuItem.AsideMenuChilds == null || !menuItem.AsideMenuChilds.Any())
{
NavigationToView(menuItem.NameSpace);
return; // 直接返回,不执行后续逻辑
}
// 有子项时,允许Expander继续处理展开/收起
}
二、透明背景覆盖法
<Expander HorizontalContentAlignment="Stretch" Background="{x:Null}">
<Expander.Header>
<!-- 用透明Button覆盖整个Header区域 -->
<Button
Background="Transparent"
BorderThickness="0"
Command="{Binding DataContext.HeaderClickCommand, ElementName=list}"
CommandParameter="{Binding}">
<StackPanel Orientation="Horizontal">
<md:PackIcon Width="24" Height="24" Kind="{Binding Icon}" />
<TextBlock Margin="15,0,0,0" Text="{Binding Title}" FontSize="15"/>
</StackPanel>
</Button>
</Expander.Header>
<Expander.Content>
<ItemsControl ItemsSource="{Binding AsideMenuChilds}" />
</Expander.Content>
</Expander>
关键点,设置 Background="Transparent" ,将按钮当作一个块去处理

浙公网安备 33010602011771号