WPFのListViewのGrid表示モードでの右寄せとか(3)
通りすがりさんから情報貰ったので、さっそく試してみた。
ListViewItem.HorizontalContentAlignmentにStretchやらRightやらを設定すれば良いって事なんだけど、XAMLの構造ツリーのどこを探してもない。
で、どーやるんだと色々調べたら、どーやらStyleとSetterを使えって事らしく。
XAML
<Window x:Class="ListViewTest3.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<XmlDataProvider x:Key="testData" XPath="Items">
<x:XData>
<Items xmlns="">
<Item>
<Name>hoge</Name>
<Size>100</Size>
<Color>black</Color>
</Item>
<Item>
<Name>piyo</Name>
<Size>100000</Size>
<Color>red</Color>
</Item>
<Item>
<Name>fuga</Name>
<Size>10</Size>
<Color>white</Color>
</Item>
</Items>
</x:XData>
</XmlDataProvider>
<Style x:Key="stretchListViewItem" TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
<DataTemplate x:Key="paneColor">
<TextBlock Text="{Binding XPath=Color}" HorizontalAlignment="Center"/>
</DataTemplate>
<DataTemplate x:Key="paneSize">
<TextBlock Text="{Binding XPath=Size}" HorizontalAlignment="Right"/>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding Source={StaticResource testData},XPath=Item}"
ItemContainerStyle="{StaticResource stretchListViewItem}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding XPath=Name}" Width="70"/>
<GridViewColumn Header="Size" CellTemplate="{StaticResource paneSize}" Width="70"/>
<GridViewColumn Header="Color" CellTemplate="{StaticResource paneColor}" Width="70"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<XmlDataProvider x:Key="testData" XPath="Items">
<x:XData>
<Items xmlns="">
<Item>
<Name>hoge</Name>
<Size>100</Size>
<Color>black</Color>
</Item>
<Item>
<Name>piyo</Name>
<Size>100000</Size>
<Color>red</Color>
</Item>
<Item>
<Name>fuga</Name>
<Size>10</Size>
<Color>white</Color>
</Item>
</Items>
</x:XData>
</XmlDataProvider>
<Style x:Key="stretchListViewItem" TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
<DataTemplate x:Key="paneColor">
<TextBlock Text="{Binding XPath=Color}" HorizontalAlignment="Center"/>
</DataTemplate>
<DataTemplate x:Key="paneSize">
<TextBlock Text="{Binding XPath=Size}" HorizontalAlignment="Right"/>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding Source={StaticResource testData},XPath=Item}"
ItemContainerStyle="{StaticResource stretchListViewItem}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding XPath=Name}" Width="70"/>
<GridViewColumn Header="Size" CellTemplate="{StaticResource paneSize}" Width="70"/>
<GridViewColumn Header="Color" CellTemplate="{StaticResource paneColor}" Width="70"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
つまりは、こーゆー事くわぁっ。
・・・あー・・・俺が100ステップも使って頑張って実現した事が、たったの4ステップで終わってしまった・・・orz
こ、この徒労感は一体・・・。
い、一応抜粋しとくと、
<Style x:Key="stretchListViewItem" TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
でスタイル定義して、ListViewのItemContainerStyleに定義するだけでOKって事らしい。
むぅ、XAML、便利なんだけどもーちょっとハウツー充実してくれねぇかな<MS
ともかく、ありがとうございました~>通りすがりさん
トラックバック URL :
はじめまして、GridViewItemの右寄せで検索したところ上の方に出てきたので参考にさせていただきました。
経験を積めばWPFでさくっとツールがかけるようになるものなのか、自分は基本がわかってないので、もっと勉強しなければ。
とにかく、おかげさまでとりあえず右寄せできました!
ありがとうございます。
–
自分は、上のようにしたら全部右寄せになりました。
コメント by この — 2011/3/8 Tue @ 3:14:30
すみません、xml の部分が書き込めませんでした。ごめんなさい。
コメント by この — 2011/3/8 Tue @ 3:15:56