- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我遇到了与以下旧论坛帖子中所述相同的问题:Issue on MSDN
但是,出于某种原因,Microsoft 决定删除此处描述的答案中的功能。
我正在寻找的是一个 ListView 有 2+ 列,第一列包含随机数据(因此随机宽度元素),使第一列的宽度与内部最宽的元素相同。
最佳答案
SharedSizeGroup
是WPF 独有的,UWP 中不存在。
为了了解衡量标准,我们需要查看所有控件并找到最大值。
我们使用 Fody和 PropertyChanged.Fody nuget包。虽然只读示例不需要它们,但如果您开始修改数据,它们会很有用。我添加了 SizeChanged
事件处理程序并直接修改了宽度。您可以设置一个属性并绑定(bind)到,或者创建一个行为,但这就是完成的方式。
<Page
x:Class="TestUwp.MainPage"
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:local="using:TestUwp"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DataContext="{d:DesignInstance Type=local:DataItem}"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<ListView ItemsSource="{Binding TestData}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<Grid ColumnSpacing="6" RowSpacing="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
SizeChanged="LabelSizeChanged"
Text="{Binding FirstName}" />
<TextBlock Grid.Column="1" Text="{Binding LastName}" />
</Grid>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Page>
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
namespace TestUwp
{
public class DataItem : INotifyPropertyChanged
{
public DataItem(int id, string firstName, string lastName)
{
Id = id;
FirstName = firstName;
LastName = lastName;
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
TestData = new ObservableCollection<DataItem> {
new DataItem(1, "Pauly", "Thurlborn"),
new DataItem(2, "Orbadiah", "Ewen"),
new DataItem(3, "Britni" ,"Smead"),
new DataItem(4, "Fionna" ,"Jennemann"),
new DataItem(5, "Ashley" ,"Stoddart"),
new DataItem(6, "Bradford", "Kaesmakers"),
new DataItem(7, "Maxy" ,"Lemon"),
new DataItem(8, "Rasia" ,"Comber"),
new DataItem(9, "Colas" ,"Shepton"),
new DataItem(10, "Cacilie" ,"Tummons"),
};
DataContext = this;
}
public ObservableCollection<DataItem> TestData { get; set; }
private List<ColumnDefinition> _columns = new List<ColumnDefinition>();
private double _colSize = 0.0;
private void LabelSizeChanged(object sender, SizeChangedEventArgs e)
{
var item = (dynamic)sender;
var grid = (Grid)item.Parent;
var column = grid.ColumnDefinitions[0];
if (!_columns.Contains(column))
{
_columns.Add(column);
}
var adjustments = new List<ColumnDefinition>();
if (item.ActualWidth > _colSize)
{
_colSize = item.ActualWidth;
adjustments.AddRange(_columns);
}
else
{
adjustments.Add(column);
}
foreach (var col in adjustments)
{
col.Width = new GridLength(_colSize);
}
}
}
}
此idea的来源起源于Xamarin。
关于c# - UWP:替代 Grid.IsSharedSizeScope 和 SharedSizeGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35255276/
我有一个列表框,我在其中使用多个数据模板呈现数据,并且我使用数据模板选择器将数据路由到适当的模板。 每个模板都有自己的网格布局。模板内每个网格的第一列是一个文本 block ,我希望它们左对齐。下一项
我有这样一种情况,我在多个网格中有按钮,并且要求所有按钮的大小都相同。我尝试使用 Grid.IsSharedSizeScope 但未成功。 最终布局应如下图所示,但所有按钮的大小应相同。 XAML 当
我遇到了与以下旧论坛帖子中所述相同的问题:Issue on MSDN 但是,出于某种原因,Microsoft 决定删除此处描述的答案中的功能。 我正在寻找的是一个 ListView 有 2+ 列,第一
我正在尝试使用 Grid.IsSharedSizeScope 将 ItemsControl 显示的数据绑定(bind)控件排列在网格第一列中的一些控件旁边。 问题是我无法阻止控件不断垂直增长。 如何在
是否有任何类型的简单(非自定义编码)相当于 Windows 8/RT XAML 中的 WPF Grid.IsSharedSizeScope? 我的 ListViewItem 分为 3 个水平部分,这
我是一名优秀的程序员,十分优秀!