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" ,将按钮当作一个块去处理

posted @ 2025-05-08 20:20  孤沉  阅读(52)  评论(0)    收藏  举报