在使用ListView的時(shí)候距误,GridView中的每列寬度默認(rèn)是沒(méi)法按比例變化的,我們可以使用一個(gè)跟它同大小的Grid,給Grid設(shè)置相同數(shù)量的列奸攻,設(shè)置好每列的寬度,然后將其寬度綁定到GridView的列上來(lái)實(shí)現(xiàn)虱痕。
<Grid x:Name="gridContainer">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="150" />
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" x:Name="col1"/>
<Grid Grid.Column="1" x:Name="col2"/>
<Grid Grid.Column="2" x:Name="col3"/>
<Grid Grid.Column="3" x:Name="col4"/>
</Grid>
<ListView x:Name="lvMetalPrices" ItemsSource="{Binding Path=Quotation.TransactionMetalPrices}" SelectedItem="{Binding Path=Quotation.TransactionMetalPrice}">
<!--Make the contents of the ListViewItem to fill the cell-->
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView AllowsColumnReorder="True">
<GridViewColumn x:Name="colMetalPriceCode" Header="代碼" DisplayMemberBinding="{Binding Path=MetalCategory.Code}" Width="{Binding ElementName=col1, Path=ActualWidth}"/>
<GridViewColumn x:Name="colMetalPriceDesc" Header="描述" DisplayMemberBinding="{Binding Path=MetalCategory.Description}" Width="{Binding ElementName=col2, Path=ActualWidth}"/>
<GridViewColumn x:Name="colMetalPricePrice" Header="價(jià)格(每盎司)" Width="{Binding ElementName=col3, Path=ActualWidth}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="txtMetalPrice" Text="{Binding Path=UIPricePerOz, StringFormat={}{0:N2}}" MinHeight="25" MinWidth="100" VerticalContentAlignment="Center" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="colMetalPriceRemark" Header="備注" Width="{Binding ElementName=col4, Path=ActualWidth}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox x:Name="txtMetalPriceRemark" Text="{Binding Path=UIRemark}" MinHeight="25" MinWidth="500" AcceptsReturn="False" MaxLength="255" VerticalContentAlignment="Center"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
上面代碼中睹耐,第1行到第12行定義了一個(gè)跟下面名為lvMetalPrices的ListView對(duì)應(yīng)的Grid名為gridContainer,對(duì)應(yīng)ListView的GridView的列數(shù)劃分了4列部翘,前3列使用固定的寬度硝训,而第四列使用自適應(yīng)的寬度。同時(shí)在gridContainer里每列放入一個(gè)新的Grid新思,并分別指定不同的名稱col1窖梁、col2、col3夹囚、col4窄绒。這四個(gè)新的Grid將隨著gridContainer的寬度的變化而自動(dòng)調(diào)整寬度(實(shí)際因?yàn)榍叭惺枪潭▽挾龋J(rèn)情況下只有第四列會(huì)自動(dòng)調(diào)整)崔兴。
在第22彰导、23蛔翅、24、31行中位谋,我們通過(guò)類似的代碼Width="{Binding ElementName=colx, Path=ActualWidth}"將每列的寬度跟上面對(duì)應(yīng)的Grid的寬度進(jìn)行綁定山析,這樣在Grid的寬度進(jìn)行變化的時(shí)候,該GridView中所有列的寬度也會(huì)跟著進(jìn)行對(duì)應(yīng)的變化掏父,從而達(dá)到我們的目的笋轨。
上面代碼中第15到19行的內(nèi)容,實(shí)現(xiàn)了讓GridView中每行中的單元格中的內(nèi)容跟著單元格寬度的變化而變化赊淑。
整體實(shí)現(xiàn)的效果如下:
達(dá)叔傻樂(lè)(darwin.zuo@163.com)