Скрыть заголовок списка программно - PullRequest
1 голос
/ 14 мая 2009

У меня есть ListView, как:

Col1  Col2  Col3
1      A     I
2      B     II
3      C     III 

Я использую 2 кнопки. Когда я нажимаю на первую кнопку, Col3 должен рухнуть, и он должен быть виден при нажатии на вторую кнопку.

Есть идеи, как сделать ListView в WPF?

Ответы [ 4 ]

1 голос
/ 18 мая 2009

Использование большого пальца решит проблему. Так же, как

<ListView x:Name="MyListView"IsSynchronizedWithCurrentItem="True" 
            ItemsSource="{Binding Path=Items}",  Mode=Default, 
            Source={StaticResource DataProvider}}"  
            Thumb.DragDelta="Thumb_DragDelta">


public Window1()
{ 
  InitializeComponent();  
  MyListView.AddHandler(Thumb.DragDeltaEvent,
                  new DragDeltaEventHandler(Thumb_DragDelta),
                  true );

void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
{
   Thumb senderAsThumb = e.OriginalSource as Thumb;  
   GridViewColumnHeader header = senderAsThumb.TemplatedParent as GridViewColumnHeader;    
   if (header.Column.ActualWidth < MIN_WIDTH) 
   { 
     header.Column.Width = MIN_WIDTH;
   }
   if (header.Column.ActualWidth > MAX_WIDTH)  
   {
      header.Column.Width = MAX_WIDTH;   
   }
}
}
0 голосов
/ 14 мая 2009

Я использую код как

<Grid>
    <ListView HorizontalContentAlignment="Stretch" Margin="38,12,31,110">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="COL1" Width="100"/>
                <GridViewColumn Header="COL2" Width="100"/>
                <GridViewColumn Header="COL3" Width="100"/>
            </GridView>
        </ListView.View>
    </ListView>
    <Button Height="25" HorizontalAlignment="Left" Margin="105,0,0,51" 
            Name="Collapse" VerticalAlignment="Bottom" Width="75"
            Command="{Binding MyButtonCommand}"    
            CommandParameter="{Binding ElementName = COL3}">Collapse</Button>
    <Button Height="25" HorizontalAlignment="Right" Margin="0,0,111,51" Name="Expand" 
            VerticalAlignment="Bottom" Width="75">Expand</Button>
</Grid>

и в CS

 ICommand _myButtonCommand;
    public ICommand MyButtonCommand
    {
        get 
        { 
            if (_myButtonCommand== null) _myButtonCommand = new RelayCommand(param => HideList(param ));  
            return _myButtonCommand;
        }
    }
    void HideList( object param )
    {
        ( param as ListView ).Visibility = Visibility.Hidden;
    }

Можете ли вы дать мне лучшую идею?

0 голосов
/ 14 мая 2009

Я бы поставил этот ответ как комментарий к вашему посту, но я пока не могу комментировать, так что ...

Вам необходимо присвоить имя (использовать свойство «Name») элементу, к которому вы хотите получить доступ через «Binding ElementName», иначе вы не сможете его получить. В вашем случае вы должны явно создать GridViewColumnHeader, потому что GridViewColumn не имеет свойства Visibilty:

<GridViewColumnHeader Name="COL3">COL3</GridViewColumnHeader>

Возможно, вам также придется явно создать содержимое вашего GridViewColumn, если вы хотите, чтобы оно исчезло. Это означает, что вы должны использовать GridViewColumn.DisplayMemberBinding или GridViewColumn.CellTemplate, а также дать им имя или получить к ним доступ через RelativeSource.

Посмотрите на это для возможностей: http://www.wpfwiki.com/Default.aspx?Page=WPF%20Q5.3&AspxAutoDetectCookieSupport=1
Тем не менее, вы уже подумали об использовании расширителя?

0 голосов
/ 14 мая 2009

Не могли бы вы предоставить xaml-код того, как выглядит ваш просмотр списка?

Вы можете привязать RelayCommand к вашей кнопке и передать ListView в качестве параметра. Тогда вы можете установить Visibility = False.

<Button Command="{Binding MyButtonCommand}
    CommandParameter="{Binding ElementName=Col3}" />

Это будет ваш CS:

ICommand _myButtonCommand;
public ICommand MyButtonCommand
{
    get
    {
        if (_myButtonCommand== null) _myButtonCommand= new RelayCommand(param => HideList(param ));
        return _myButtonCommand;
    }
}

void HideList(object param){
    (param as ListView).Visibility = False;
}

Я говорю о RelayCommand, как в примере Джоша Смита: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
Вы можете использовать там код.

Полагаю, вы могли бы добиться аналогичного результата в xaml только с помощью триггеров, однако я не настолько опытен в этом вопросе.

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