W8/XAML GridView->;将标题元素向右对齐
我希望GridView的标题在左侧包含组名称,在右侧包含一个符号,我做到了这一点:W8/XAML GridView->;将标题元素向右对齐,xaml,gridview,windows-8,Xaml,Gridview,Windows 8,我希望GridView的标题在左侧包含组名称,在右侧包含一个符号,我做到了这一点: <GroupStyle.HeaderTemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="*"></ColumnDefinition>
<ColumnDefinition
Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button
Grid.Column="0"
AutomationProperties.Name="Group Title"
Style="{StaticResource TextPrimaryButtonStyle}" />
<Button
Grid.Column="1"
Content=""></Button>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
不幸的是,该符号始终位于组标题旁边的左右两侧:
如何右对齐组标题中的元素?
编辑:固定大小的网格列不起作用,因为根据屏幕和单个组中项目的数量,组的宽度可能会有所不同 实现这一点的方法可能有很多。最简单的方法是在数据模板网格中设置列宽。在上面的代码中,将
width=“*”
更改为以下内容:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"></ColumnDefinition>
<ColumnDefinition Width="50"></ColumnDefinition>
</Grid.ColumnDefinitions>
总宽度等于250,这是标准网格单元大小
您可能需要根据实际需求调整这些数字。我在msdn论坛上找到了一个非常好的解决方案。这是: 首先编写一个转换器来计算Datatemplate中容器的宽度,在我的例子中是网格:
class WidthConverter : IValueConverter
{
#region IValueConverter Member
public object Convert(object value, Type targetType, object parameter, string language)
{
int x;
if (parameter != null)
x = int.Parse(parameter.ToString());
else
x = 1;
if ((int)value % x == 0)
return (int)value / x * 260 - 5;
else
return ((int)value / x + 1) * 260 - 5;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
#endregion
}
现在在页面的资源中声明它:
<local:WidthConverter x:Key="WidthConverter"/>
最后使用绑定将其投入使用,并计算网格的宽度:
<Grid Width="{Binding Items.Count, Converter={StaticResource WidthConverter}, ConverterParameter=2}">
将转换器参数设置为显示的行数,这取决于屏幕分辨率(如果不限制)
将转换器中的260替换为与项目模板大小和边距匹配的数字。不幸的是,此解决方案不适合我,因为组宽度的变化取决于屏幕分辨率和单个组中的项目数。