C# 如何在通用Windows应用程序中使网格中的列共享相同的大小?
在WPF中,我们拥有Grid.SharedSizeGroup属性。这使得创建如下布局成为可能: 正如您所看到的,所有第一列的宽度都是相同的,由它们的宽度决定 这是XAML(WPF)C# 如何在通用Windows应用程序中使网格中的列共享相同的大小?,c#,.net,xaml,uwp,C#,.net,Xaml,Uwp,在WPF中,我们拥有Grid.SharedSizeGroup属性。这使得创建如下布局成为可能: 正如您所看到的,所有第一列的宽度都是相同的,由它们的宽度决定 这是XAML(WPF) 这个 快车 敏捷的棕色狐狸 敏捷的棕色狐狸跳过了懒狗 如何在UWP中获得相同的行为 如何在UWP中获得相同的行为 这个 快车 敏捷的棕色狐狸 敏捷的棕色狐狸跳过了懒狗 我无法使用边框而不是按钮控件(出于某些原因,我现在无法确定),实际复制此内容,但其余内容似乎符合您的愿望 编辑1 以前的解决方案实际上适
这个
快车
敏捷的棕色狐狸
敏捷的棕色狐狸跳过了懒狗
如何在UWP中获得相同的行为
如何在UWP中获得相同的行为
这个
快车
敏捷的棕色狐狸
敏捷的棕色狐狸跳过了懒狗
我无法使用边框而不是按钮控件(出于某些原因,我现在无法确定),实际复制此内容,但其余内容似乎符合您的愿望
编辑1 以前的解决方案实际上适用于边界控制,尽管我实际上认为它不适用(上面Stackpanel的一项实际上是边界xD)。无论如何,在这个过程中,我确实遇到了很多问题,而且它的灵活性肯定不如我试图强加给它的外观的按钮 在上面的代码中,一些绑定可能是不必要的,实际上将垂直对齐和水平对齐设置为拉伸会产生相同的结果,但一般来说,在某些情况下,它确实很有帮助
编辑2 我花在这上面的时间比我可能想承认的要多,但还是没能达到你想要的样子。浏览ListView模板并删除项目之间的间距将为您提供所需的外观,即使实现可能实际上是次优的
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView x:Name="LISTVIEW_TEXT" Grid.Column="0">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Padding" Value="0,0,0,0"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding text}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ListView x:Name="LISTVIEW_COLOR" Grid.Column="1">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Height" Value="20"/>
<Setter Property="Padding" Value="0,0,0,0"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Button Background="{Binding color}" Height="20" Width="{Binding ActualWidth, ElementName=LISTVIEW_COLOR}" VerticalAlignment ="Stretch" Margin="0,0,0,0"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
在后面的代码中,我直接使用颜色和文本列表设置ItemsSource 这是个很酷的把戏!但是,如果每个项目都是使用带有ItemsSource的ListView生成的,您怎么能让它工作呢?编辑了我的文章,并试图这样做。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" x:Name="AutoColumn"/>
<ColumnDefinition Width="*" x:Name="OtherColumn"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Vertical" Grid.Column="0">
<TextBlock x:Name="text1" Width="{Binding ActualWidth, ElementName=AutoColumn}">The</TextBlock>
<TextBlock x:Name="text2" Width="{Binding ActualWidth, ElementName=AutoColumn}">The quick</TextBlock>
<TextBlock x:Name="text3" Width="{Binding ActualWidth, ElementName=AutoColumn}">The quick brown fox</TextBlock>
<TextBlock x:Name="text4" Width="{Binding ActualWidth, ElementName=AutoColumn}">The quick brown fox jumps over the lazy dog</TextBlock>
</StackPanel>
<StackPanel Orientation="Vertical" Grid.Column="1">
<Button Background="Azure" Width="{Binding ActualWidth, ElementName=OtherColumn}" Height="{Binding ActualHeight, ElementName=text1}"></Button>
<Button Background="DeepSkyBlue" Width="{Binding ActualWidth, ElementName=OtherColumn}" Height="{Binding ActualHeight, ElementName=text2}"></Button>
<Button Background="Blue" Width="{Binding ActualWidth, ElementName=OtherColumn}" Height="{Binding ActualHeight, ElementName=text3}"></Button>
<Border Background="DarkBlue" Width="{Binding ActualWidth, ElementName=OtherColumn}" Height="{Binding ActualHeight, ElementName=text4}"></Border>
</StackPanel>
</Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView x:Name="LISTVIEW_TEXT" Grid.Column="0">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Padding" Value="0,0,0,0"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding text}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ListView x:Name="LISTVIEW_COLOR" Grid.Column="1">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Height" Value="20"/>
<Setter Property="Padding" Value="0,0,0,0"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<Button Background="{Binding color}" Height="20" Width="{Binding ActualWidth, ElementName=LISTVIEW_COLOR}" VerticalAlignment ="Stretch" Margin="0,0,0,0"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>