【问题标题】:Expand columns vertically when adding content in a ListView在 ListView 中添加内容时垂直展开列
【发布时间】:2017-05-03 01:41:39
【问题描述】:

我正在为音乐目录的 XML API 创建一个 Windows WPF 接口。

所以在创建专辑、歌曲、播放列表等列表时,我创建了带有列的列表框(使用 Visual Studio,因为我没有 Windows 编程经验):

<Window x:Class="AmpacheWPF.Programacion"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:AmpacheWPF"
    mc:Ignorable="d"
    Title="Programacion" Height="917.833" Width="1206.666">
<Grid>
    <ComboBox x:Name="comboBox" HorizontalAlignment="Left" Margin="26,39,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="comboBox_SelectionChanged"/>
    <ListView x:Name="albums" HorizontalAlignment="Left" Height="146" Margin="26,99,0,0" VerticalAlignment="Top" Width="549" SelectionChanged="albums_SelectionChanged">

        <ListView.View >
            <GridView AllowsColumnReorder="False">
                <GridView.ColumnHeaderContextMenu>
                    <ContextMenu/>
                </GridView.ColumnHeaderContextMenu>
                <GridViewColumn Header="Album"
                                DisplayMemberBinding="{Binding Album}" Width="120"/>
                <GridViewColumn Header="Artist"
                                DisplayMemberBinding="{Binding Artist}"/>
                <GridViewColumn Header="Year"
                                DisplayMemberBinding="{Binding Year}"/>
            </GridView>
        </ListView.View>
    </ListView>
    <Label x:Name="label" Content="Label" HorizontalAlignment="Left" Margin="160,54,0,0" VerticalAlignment="Top"/>
    <ListView x:Name="Songs" HorizontalAlignment="Left" Height="257" Margin="26,286,0,0" VerticalAlignment="Top" Width="549" SelectionChanged="Songs_SelectionChanged">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="#"
                                DisplayMemberBinding="{Binding Pista}"/>
                <GridViewColumn Header="Cancion"
                                DisplayMemberBinding="{Binding Titulo}"/>
                <GridViewColumn Header="Compositor"
                                DisplayMemberBinding="{Binding Compositor}"/>
                <GridViewColumn Header="Artista"
                                DisplayMemberBinding="{Binding Artist}"/>
                <GridViewColumn Header="Tiempo"
                                DisplayMemberBinding="{Binding Tiempo}"/>
                <GridViewColumn Header="Genero"
                                DisplayMemberBinding="{Binding Genero}"/>
            </GridView>
        </ListView.View>
    </ListView>

</Grid>

它有列(专辑、艺术家、年份) 所有信息都由我的音乐服务器的 XML API 自动填充。

我有一个包含流派(拉丁语、莎莎舞等)的组合框

每次单击流派时,它都会在 ListView 专辑中加载信息,当我单击专辑时,它会填充 ListView 歌曲。

我试图做的没有成功的是修复列的大小(这是我唯一可以用“宽度”做的事情)并希望当文本不适合时列垂直扩展列宽(就像 Microsoft excel 一样)(所以我有 2 或 3 行),但请告诉我将它放在代码的哪个位置,因为我真的没有在 Windows 上编程的经验。

以下是我的代码的一些示例,以防有帮助:

public Programacion()
    {
        InitializeComponent();
        serverurl = Loginwindow.serverurl;
        string ampuser = Loginwindow.ampuser;
        token = Loginwindow.token;

        //obteniendo lista de tags
        string tagurl = "http://" + serverurl + "/server/xml.server.php?action=tags&auth=" + token;
        string[] tagarray = { tagurl, "1", "tag", "name", "albums" };//Creando array con datos a utilizar
        tagsinfo = xmlcs2.Xmlparser(tagarray);//Llamando afuncion que lee XML

        //Obteniendo total de espacios musicales contando el array
        totalgenres = tagsinfo.GetUpperBound(0);

        //Lennado ComboBox1
        int g = Programacion.totalgenres;
        for (int y = 0; y < g; y++)
        {
            comboBox.Items.Add(tagsinfo[y][1]); //
        }

    }

    private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        int index = comboBox.SelectedIndex;
        id = tagsinfo[index][0];
        string totalalbums = tagsinfo[index][2];


        //obteniendo lista de albums
        string tagurl = "http://" + serverurl + "/server/xml.server.php?action=tag_albums&auth=" + token + "&filter=" + id;
        string[] tagarray = { tagurl, totalalbums, "album", "name", "tracks", "artist", "year" };//Creando array con datos a utilizar
        albumsinfo = xmlcs2.Xmlparser(tagarray);//Llamando afuncion que lee XML

        //ordenando alfabeticamente
        Sort(albumsinfo, 1);

        //Lennado ListView Albums
        albums.ItemsSource = null;
        int g = Convert.ToInt32(totalalbums);

        List<Albumlist> items = new List<Albumlist>();
        for (int y = 0; y < g; y++)
        {

            if (albumsinfo[y][4] == "0")
            {

                items.Add(new Albumlist() { Album = albumsinfo[y][1], Artist = albumsinfo[y][3], Year = "" });


            }
            else
            {
                items.Add(new Albumlist() { Album = albumsinfo[y][1], Artist = albumsinfo[y][3], Year = albumsinfo[y][4], Id = albumsinfo[y][0] });



            }



        }
        albums.ItemsSource = items;


    }

提前感谢您的帮助。

【问题讨论】:

标签: c# wpf listview visual-studio-2015


【解决方案1】:

看起来您需要做的是根据this answer 更改 GridView 中的 CellTemplate 中的 DisplayMemberBinding,这将允许您将演示者对象自定义为带有包装的自定义 TextBlock(这也将正确关于让网格布局知道它需要更多空间的事情。

您可能无法立即获得 Excel 行为,您可能需要尝试使用其他 TextBlock 设置以使其完全按照您的要求工作。

【讨论】:

  • 非常感谢,我看过那篇帖子,但现在有了你的解释,我明白我应该改变什么,我会为将来需要它的人发布最终代码
猜你喜欢
  • 1970-01-01
  • 2011-04-20
  • 2012-03-04
  • 2018-10-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多