gpt4 book ai didi

c# - UWP:替代 Grid.IsSharedSizeScope 和 SharedSizeGroup

转载 作者:可可西里 更新时间:2023-11-01 03:02:35 26 4
gpt4 key购买 nike

我遇到了与以下旧论坛帖子中所述相同的问题:Issue on MSDN
但是,出于某种原因,Microsoft 决定删除此处描述的答案中的功能。

我正在寻找的是一个 ListView 有 2+ 列,第一列包含随机数据(因此随机宽度元素),使第一列的宽度与内部最宽的元素相同。

最佳答案

SharedSizeGroupWPF 独有的,UWP 中不存在。

目标:创建 SharedSizeGroup 的替代方案

为了了解衡量标准,我们需要查看所有控件并找到最大值。

我们将做什么

我们使用 FodyPropertyChanged.Fody nuget包。虽然只读示例不需要它们,但如果您开始修改数据,它们会很有用。我添加了 SizeChanged 事件处理程序并直接修改了宽度。您可以设置一个属性并绑定(bind)到,或者创建一个行为,但这就是完成的方式。

enter image description here

查看

<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>

模型和 View 模型

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com