首页 > 其他分享 >动态控件之ItemsPanelTemplate

动态控件之ItemsPanelTemplate

时间:2024-03-22 11:23:29浏览次数:26  
标签:控件 albumList 生成 new 动态 ItemsPanelTemplate

一、Axaml生成

列表框有一个属性,其中包含一个用于布局列表项的模板控件。默认情况下,这是一个堆叠面板。为了使专辑封面填充所有空间,可以将面板模板更改为包装面板。方式如下:

<ListBox ItemsSource="{Binding SearchResults}" SelectedItem="{Binding SelectedAlbum}"
    Background="Transparent" Margin="0 20">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

这里是没有问题的,但是我的控件都是动态生成的,上边的xaml也想翻译成C# 动态生成代码。

 

二、C#动态生成

ListBox albumList = new ListBox
{
    Background = Brushes.Transparent,
    Margin = new Thickness(0, 20)
};

ItemsPanelTemplate itemsPanelTemplate = new ItemsPanelTemplate
{
    Content = new WrapPanel()
};
albumList.ItemsPanel = itemsPanelTemplate;

使用Content装载WrapPanel,是有问题的:

Unexpected content Avalonia.Controls.WrapPanel Arg_ParamName_Name

而只提供了ItemsPanelTemplate只提供了如下图的属性和方法:

 因此就无法使用动态生成的方式了。

 

三、Axaml结合动态生成

既然整个axaml页面的控件都是动态生成,只有ListBox使用WrapPanel是报错,那么我们使用混合方式,该控件声明在axmal中写,在code-behind中使用,和其他动态生成的控件进行结合

axaml中:

<UserControl xmlns="https://github.com/avaloniaui"
             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"
             mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
             x:Class="Avalonia.MusicStore.Views.MusicStoreView">
    <ListBox x:Name="_albumList" Background="Transparent" Margin="0 20">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel />
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
</UserControl>

code-behind中:

public MusicStoreView()
{
    InitializeComponent();
  //这里注释的是动态生成的其他控件,包含_mainDockPanel

  AvaloniaXamlLoader.Load(this); // 加载XAML内容 ,这句代码非常重要,将axaml中的控件优先加载过来
  _albumList.ItemsSource = this.GetAlbumViews();
_mainDockPanel.Children.Add(_albumList);

// 将DockPanel设置为UserControl的内容

this.Content = _mainDockPanel;

 

标签:控件,albumList,生成,new,动态,ItemsPanelTemplate
From: https://www.cnblogs.com/qtiger/p/18089042

相关文章

  • web常用控件和弹窗
    web常见控件介绍 常见的控件: 1.文本输入框(TextBox) 2.按钮控件(Button) 3.下拉选框(DropList) 4.日期/时间控件(Date/TimePicker) 5.(图片、文件)上传控件(Upload)  6.树形控件(TreeView) 7.列表框(ListBox) 8.多格式文本框(RichTextBox)  9.Tab控件10.其他控件......
  • Java中的代理模式(动态代理和静态代理)
    代理模式我们先了解一下代理模式:在开发中,当我们要访问目标类时,不是直接访问目标类,而是访问器代理类。通过代理类调用目标类完成操作。简单来说就是:把直接访问变为间接访问。这样做的最大好处就是:我们可以在代理类调用目标类之前和之后去添加一些预处理和后处理操作。来扩展......
  • 智能查询报表:展现动态SQL的魅力与实用性
    背景介绍报表是现代企业信息化不可缺少的统计分析工具,它主要用来实现企业内相对固定的资金日报、销售周报、财务月报以及关键数据的统计分析等较为细致的数据展示分析。动态SQL查询报表是指根据提供的条件,结合相关的表达式,在运行时动态地构建SQL查询语句并生成报表的过程。它允许......
  • Ollama、Langchain相关学习资源(动态更新)
    大型预训练模型如GPT系列、BERT系列等,在消费级产品和垂直行业应用中加快了部署步伐,包括但不限于智能客服、内容创作、代码生成、决策支持等领域。随着大模型开源,相关的部署工具和框架也得到发展和完善。例如,出现了一些专门针对大模型本地部署的解决方案,像Ollama(虽然该名......
  • AJAX 前端开发利器:实现网页动态更新的核心技术
    AJAXAJAX是开发者的梦想,因为你可以:在不重新加载页面的情况下更新网页在页面加载后请求来自服务器的数据在页面加载后接收来自服务器的数据在后台向服务器发送数据HTML页面<!DOCTYPEhtml><html><body><divid="demo"><h2>让AJAX更改这段文字</h2><buttontype=......
  • 代码随想录算法训练营第五十三天| ● 1143.最长公共子序列 ● 1035.不相交的线 ●
    最长公共子序列 题目链接:1143.最长公共子序列-力扣(LeetCode)思路:。classSolution{public:intlongestCommonSubsequence(stringtext1,stringtext2){vector<vector<int>>dp(text1.size()+1,vector<int>(text2.size()+1,0));for(inti......
  • 动态链接的执行过程
    背景:静态链接库一旦链接进去,代码和变量的section都合并了,因而程序运行的时候,就不依赖于这个库是否存在。但是这样有一个缺点:就是相同的代码段,如果被多个程序使用的话,在内存里面就有多份;而且一旦静态链接库更新了,如果二进制执行文件不重新编译,也不随着更新。因而就出现......
  • 代码随想录算法训练营第五十三天 | 53. 最大子序和 动态规划,1035.不相交的线,1143.最
    53.最大子数组和 已解答中等 相关标签相关企业 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。  示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]......
  • 插件-js实现动态时钟效果
    <divid="updatetime"></div>constupdateTime=()=>{varnow=newDate();varyear=now.getFullYear();varmonth=now.getMonth()+1;//getMonth()返回0-11varday=now.getDate();varhours=now.getHour......
  • 动态开点并查集+树上差分
    https://www.acwing.com/problem/content/description/2071/每次合并的时候需要开一个新点去实现信息的无后效性,也就是合并之前的两个连通块信息是无法共享的,发现这样开点连边最后形成一棵树,每次我们将信息传递到新点,也是两个合并点的lca,这使得最后求答案的直接求一边树上前缀和......