2010-05-26 2 views
3

Я бы хотел, чтобы Expander не расширялся и не рушился, когда пользователи щелкают внутри области заголовка. Это в основном тот же вопрос, что и Q 1396153, но я был бы признателен за более благоприятный ответ :)Как проглотить поведение выпадающего списка внутри Expander.Header?

Есть ли неинвазивный способ сделать это? Я не уверен точно, как прикрепить поведение к содержимому Expander.Header, чтобы предотвратить mouseclicks. Я готов плавать по содержимому вне самого расширителя через фиксированный макет сетки, но я не увлекаюсь решением. Идеи?

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> 

ответ

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; 
} 
+0

Спасибо! Я еще не пробовал, но я оптимистичен, это решит проблему. –

+0

Обратите внимание: это решение не подчиняется строгим подходам MVVM. –

+0

Отсутствие кода (что, я думаю, вы имеете в виду со строгим подходом MVVM), может быть достигнуто путем перемещения код для подавления события «мыши вниз» для присоединенного поведения или подкласса класса Expander. –

0

Я не знаю, если это мерзость, но, я переместил содержимое из-за Expander.Header и сделал некоторые сетки/фиксированный макет/Panel. ZIndex, чтобы заставить его казаться, что содержимое находится в Expander.Header ... но это не так. Это работает, но это ужасно.