IはListView
等を有する:隠すリストビューヘッダーはプログラム的
Col1 Col2 Col3 1 A I 2 B II 3 C III
Iは、2つのボタンを使用します。最初のボタンをクリックするとCol3が崩壊し、2番目のボタンをクリックすると表示されます。
WPFでそのようなListView
を実行する方法に関するアイデアはありますか?
IはListView
等を有する:隠すリストビューヘッダーはプログラム的
Col1 Col2 Col3 1 A I 2 B II 3 C III
Iは、2つのボタンを使用します。最初のボタンをクリックするとCol3が崩壊し、2番目のボタンをクリックすると表示されます。
WPFでそのようなListView
を実行する方法に関するアイデアはありますか?
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;
}
}
}
リストビューの外観の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でトリガだけでも同様の結果が得られると思いますが、私はそのような経験はありません。
私は
<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が私に良いアイデアを与えることができますか?
(「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
しかし、エクスパンダの使用についてはまだ考えていますか?
No Nameプロパティの単純化されたバリエーションです。 – Sauron
どこから情報を入手しましたか? Intellisenseを使用するか、msdnライブラリを見るだけで、Nameプロパティを見つけることができます:http://msdn.microsoft。com/ja-us/library/system.windows.controls.gridviewcolumnheader_members.aspx 3.5より古い.NETバージョンを使用していますか? – Torsten
別のことは私の頭に浮かぶのは、xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"という名前空間です。通常はデフォルトで追加されますが、それを使用する必要があります。次にx:Nameをプロパティとして使用できます。 – Torsten
RelayCommandを含む名前空間はどれですか? – Sauron
独自のRelayCommandクラスを作成する必要があります。上に投稿したリンクのコードをダウンロードしてください(またはこのクイックリンクはhttp://code.msdn.microsoft.com/mag200902MVVM/Release/ProjectReleases.aspx?ReleaseId=2026)。 "RelayCommandは、GridViewColumnHeaderで使用可能なDelegateCommand" – Torsten