【问题标题】:Equal Sized Columns in ListView in Windows Store appWindows 应用商店应用程序中 ListView 中大小相等的列
【发布时间】:2014-05-14 15:55:36
【问题描述】:

我想让列表视图中的所有列在某种意义上都等宽,用户名标题下的所有列都应该等宽。目前它看起来像附件以下是我的代码,

         <ListView HorizontalAlignment="Left" Width="1000" x:Name="MainLIst">
        <ListView.Resources>
            <DataTemplate x:Key="DataTemplate1">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="1*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Border Background="SaddleBrown" MaxWidth="213">
                        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding FirstName}" VerticalAlignment="Top" Margin="0,0,30,0"/>
                    </Border>
                    <Border Background="Maroon" Grid.Column="1" MaxWidth="200">
                        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding LastName}" VerticalAlignment="Top"  Margin="0,0,30,0"/>
                    </Border>
                    <Border Background="Brown" Grid.Column="2" >
                        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding Username}" VerticalAlignment="Top" Margin="0,0,30,0"/>
                    </Border>
                    <Border Background="RosyBrown" Grid.Column="3" >
                        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding Passwrd}" VerticalAlignment="Top" Grid.Column="3" Margin="0,0,30,0"/>
                    </Border>
                </Grid>
            </DataTemplate>
            <DataTemplate x:Key="HeaderTemplate">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="1*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Border Background="SaddleBrown" MaxWidth="213">
                        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="First Name" VerticalAlignment="Top" Margin="0,0,30,0"/>
                    </Border>
                    <Border Background="Maroon" Grid.Column="1" MaxWidth="200">
                        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Last Name" VerticalAlignment="Top"  Margin="0,0,30,0"/>
                    </Border>
                    <Border Background="Brown" Grid.Column="2" >
                        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="User Name" VerticalAlignment="Top" Margin="0,0,30,0"/>
                    </Border>
                    <Border Background="RosyBrown" Grid.Column="3" >
                        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Password" VerticalAlignment="Top" Grid.Column="3" Margin="0,0,30,0"/>
                    </Border>
                </Grid>
            </DataTemplate>
        </ListView.Resources>
        <ListView.HeaderTemplate>
            <StaticResource ResourceKey="HeaderTemplate"/>
        </ListView.HeaderTemplate>
        <ListView.ItemTemplate>
            <StaticResource ResourceKey="DataTemplate1"/>
        </ListView.ItemTemplate>
    </ListView>

和背后的代码,

 public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        ObservableCollection<ClassItem> classItemObj = new ObservableCollection<ClassItem>();
        classItemObj.Add(new ClassItem() { FirstName = "1234567890", LastName = "1234567890", Passwrd = "sdf", Username = "123445567788894564512345678906" });
        classItemObj.Add(new ClassItem() { FirstName = "12345678901234567890", LastName = "1234567890", Passwrd = "sdf", Username = "12344556778889456456" });
        classItemObj.Add(new ClassItem() { FirstName = "1234567890", LastName = "123456789012345678901234567890", Passwrd = "sdf", Username = "123445567788894564561234567890" });
        classItemObj.Add(new ClassItem() { FirstName = "1234567890", LastName = "12345678901234567890", Passwrd = "sdf", Username = "1234455677888945645612345678901234567890" });
        classItemObj.Add(new ClassItem() { FirstName = "1234567890123456789012345678901234567890", LastName = "1234567890", Passwrd = "sdf", Username = "12344556778889456456" });
        MainLIst.ItemsSource = classItemObj;
    }
}

public class ClassItem
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Username { get; set; }
    public string Passwrd { get; set; }
}

}

【问题讨论】:

    标签: windows-8 windows-runtime windows-store-apps winrt-xaml


    【解决方案1】:

    您当前将Widths 列设置为自动。如果您指定像素值 - 它们应该是相同的。

    【讨论】:

    • 我的文本内容大小会有所不同。我不应该换行或添加省略号。有什么办法可以让所有的列宽都是最宽的文本块的宽度?
    • 是的,但是每次TextBlock 大小发生变化时,您都需要手动更新它们。您需要处理每个TextBlock 上的SizeChanged 事件并确定这些事件的最大大小。然后,您可以使用我在this question 的答案中描述的DoubleViewModel 将您的Border.Width 属性绑定到该视图模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多