2009-05-14 2 views
1

IはListView等を有する:隠すリストビューヘッダーはプログラム的

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

Iは、2つのボタンを使用します。最初のボタンをクリックするとCol3が崩壊し、2番目のボタンをクリックすると表示されます。

WPFでそのようなListViewを実行する方法に関するアイデアはありますか?

答えて

1

Thumbを使用すると問題が解決します。 と同様に

<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

リストビューの外観の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
あなたがそこにコードをdlとすることができます。

xamlでトリガだけでも同様の結果が得られると思いますが、私はそのような経験はありません。

+0

RelayCommandを含む名前空間はどれですか? – Sauron

+0

独自のRelayCommandクラスを作成する必要があります。上に投稿したリンクのコードをダウンロードしてください(またはこのクイックリンクはhttp://code.msdn.microsoft.com/mag200902MVVM/Release/ProjectReleases.aspx?ReleaseId=2026)。 "RelayCommandは、GridViewColumnHeaderで使用可能なDelegateCommand" – Torsten

0

私は

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

ようなコードを使用していますuが私に良いアイデアを与えることができますか?

0

(「name」プロパティを使用して)名前に要素をあなたが持っている

を私はあなたのポストのコメントとして、この答えを入れていると思いますが、私はまだ、コメントすることはできないんだけど、そう...あなたが "Binding ElementName"を介してアクセスしたい場合、それを得ることができません。 GridViewColumnは何Visibilty性質を持っていないので、あなたのケースでは、明示的、GridViewColumnHeaderを作成する必要があります。

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

をあなたはおそらくもかかわらず、あなたはそれが消えるようにしたい場合は、明示的にあなたのGridViewColumnのコンテンツを作成する必要があります。つまり、GridViewColumn.DisplayMemberBindingまたはGridViewColumn.CellTemplateを使用してそれらに名前を付けたり、RelativeSource経由でアクセスしたりする必要があります。

可能性についてはこちらをご覧ください:http://www.wpfwiki.com/Default.aspx?Page=WPF%20Q5.3&AspxAutoDetectCookieSupport=1
しかし、エクスパンダの使用についてはまだ考えていますか?

+0

No Nameプロパティの単純化されたバリエーションです。 – Sauron

+0

どこから情報を入手しましたか? Intellisenseを使用するか、msdnライブラリを見るだけで、Nameプロパティを見つけることができます:http://msdn.microsoft。com/ja-us/library/system.windows.controls.gridviewcolumnheader_members.aspx 3.5より古い.NETバージョンを使用していますか? – Torsten

+0

別のことは私の頭に浮かぶのは、xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"という名前空間です。通常はデフォルトで追加されますが、それを使用する必要があります。次にx:Nameをプロパティとして使用できます。 – Torsten

関連する問題