如何吞下Expander.Header中的下拉行为?

时间:2010-05-26 17:50:11

标签: wpf expander routed-events

当用户在标题区域内单击时,我想阻止扩展器扩展/折叠。这与Q 1396153基本上是同一个问题,但我会感谢一个更有利的答案:)

有没有非侵入性的方法吗?我不确定如何将行为附加到Expander.Header内容以防止鼠标点击。我愿意通过固定的网格布局在扩展器本身之外的内容中浮动,但我并不热衷于解决方案。想法?

XamlPad示例XAML:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
    <Expander>
    <Expander.Header><TextBlock>
        When I click this text, 
        I don't want to trigger expansion/collapse! Only when I click the 
        expander button do I want to trigger an expand/collapse!
    </TextBlock></Expander.Header>

    <Grid Background="Red" Height="100" Width="100" >
    </Grid>
    </Expander>
</Page>

2 个答案:

答案 0 :(得分:3)

您可以停止鼠标单击文本框,使其不被您的应用程序处理。

XAML:

<Expander>
    <Expander.Header>
        <TextBlock MouseDown="TextBlock_MouseDown"> 
            When I click this text,  
            I don't want to trigger expansion/collapse! Only when I click the  
            expander button do I want to trigger an expand/collapse!
                    </TextBlock>
        </Expander.Header>
    <Grid Background="Red" Height="100" Width="100" >
    </Grid>
</Expander>

代码背后:

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;
}

答案 1 :(得分:0)

我不知道这是否令人厌恶,但是,我已经将内容从Expander.Header中移出并完成了一些网格/固定布局/ Panel.ZIndex技巧,使其看起来内容在Expander.Header ......但事实并非如此。这很有效,但它太可怕了。