Запретить отзыв нажатия кнопки в несортируемом заголовке WPF ListView - PullRequest
3 голосов
/ 18 мая 2010

Для WPF ListView, привязанного к простому списку, который не нуждается или не поддерживает сортировку, как вы можете сделать так, чтобы пользователь не получал обратную связь при нажатии кнопки, когда он нажимал на заголовок? По умолчанию нажатие на середину заголовка столбца похоже на нажатие кнопки, для которой ничего не происходит.

Пример внешнего вида, который я пытаюсь добиться, находится в Панели управления системой> Расширенные настройки системы> Настройки профиля пользователя. Список профилей не поддерживает сортировку. Соответственно, заголовок не реагирует на нажатие (за исключением кликов изменения размера столбца).

Ответы [ 2 ]

5 голосов
/ 18 мая 2010

Вы можете сделать это, установив для IsEnabled значение false в заголовках столбцов, которые вы не хотите нажимать. Я вставил пример, который я использовал в качестве теста. Единственное, что я сделал, это изменил кисть переднего плана, чтобы заголовок отключенного столбца отображался черным, как и другой заголовок.

<ListView>
    <ListView.View>
        <GridView>
            <GridViewColumn Width="120">
                <GridViewColumnHeader IsEnabled="True"  Content="Col A" Foreground="Black"/>
            </GridViewColumn>
            <GridViewColumn Width="120">
                <GridViewColumnHeader IsEnabled="False" Content="Col B" Foreground="Black"/>
            </GridViewColumn>
        </GridView>
    </ListView.View>
    <ListViewItem>1</ListViewItem>
    <ListViewItem>4</ListViewItem>
    <ListViewItem>2</ListViewItem>
    <ListViewItem>3</ListViewItem>
</ListView>

Первый столбец кликабелен, второй - нет. Надеюсь, это поможет!

edit: образец, указанный в моем комментарии. Этот метод оставляет заголовок включенным, но по-прежнему не позволяет щелкать по нему:

<ListView>
    <ListView.View>
        <GridView>
            <GridViewColumn Width="120">
                <GridViewColumnHeader Content="Col A"/>
            </GridViewColumn>
            <GridViewColumn Width="120">
                <GridViewColumnHeader Content="Col B" PreviewMouseDown="GridViewColumnHeader_PreviewMouseDown"/>
            </GridViewColumn>
        </GridView>
    </ListView.View>
    <ListViewItem>1</ListViewItem>
    <ListViewItem>4</ListViewItem>
    <ListViewItem>2</ListViewItem>
    <ListViewItem>3</ListViewItem>

И код для события:

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

Это в основном «съедает» любые клики, сделанные по этой кнопке. К сожалению, это также мешает вам изменить размер, так как вам нужно нажать, чтобы изменить размер. Может быть способ проверить щелчок, чтобы увидеть, является ли он нажатием кнопки или изменением размера области и обрабатывать только нажатия кнопки, но я не уверен в этом.

1 голос
/ 24 мая 2013

Если вы хотите отключить кнопки заголовка для всех ListViews, создайте стиль в своем файле Application.xaml в Application.Resources. Заголовки не будут значительными, когда вы сделаете это.

<Application>
...
    <Application.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" >
    <Setter Property="Template" >
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                <Border BorderBrush="LightGray" BorderThickness="1,0,1,0">
                    <TextBlock Text="{TemplateBinding Content}" TextAlignment="Center" 
                               Background="LightSteelBlue"  />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

из ... http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/02212923-85bc-4a20-a41c-c1b558fce8c1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...