Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在通用Windows应用程序中使网格中的列共享相同的大小?_C#_.net_Xaml_Uwp - Fatal编程技术网

C# 如何在通用Windows应用程序中使网格中的列共享相同的大小?

C# 如何在通用Windows应用程序中使网格中的列共享相同的大小?,c#,.net,xaml,uwp,C#,.net,Xaml,Uwp,在WPF中,我们拥有Grid.SharedSizeGroup属性。这使得创建如下布局成为可能: 正如您所看到的,所有第一列的宽度都是相同的,由它们的宽度决定 这是XAML(WPF) 这个 快车 敏捷的棕色狐狸 敏捷的棕色狐狸跳过了懒狗 如何在UWP中获得相同的行为 如何在UWP中获得相同的行为 这个 快车 敏捷的棕色狐狸 敏捷的棕色狐狸跳过了懒狗 我无法使用边框而不是按钮控件(出于某些原因,我现在无法确定),实际复制此内容,但其余内容似乎符合您的愿望 编辑1 以前的解决方案实际上适

在WPF中,我们拥有Grid.SharedSizeGroup属性。这使得创建如下布局成为可能:

正如您所看到的,所有第一列的宽度都是相同的,由它们的宽度决定

这是XAML(WPF)


这个
快车
敏捷的棕色狐狸
敏捷的棕色狐狸跳过了懒狗
如何在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>