English 中文(简体)
与共有组群的栏目相提并论(*NOT* 无限循环)
原标题:Grid with SharedSizeGroup columns is acting very weird (*NOT* infinite loop)

如果将样本窗口排在上的项目栏下,则理事会将更新几秒的布局,直到所有栏目最终都有正确的宽度(与下期项目组完全相同)。

您可以改变窗户的宽度,从横向和纵向的角度来看待电梯的下层项目。 但是,一旦你改变窗户的高度,布局将分数秒钟。

注:在电网对地面积进行无限更新的其他问题中,没有像模糊不清之处。

我是否做过错——如果是的话,我如何能够确定这一点? ——或者我是否将这一问题留给微软公司处理?

背后法典:

namespace DynamicGridColumnBinding
{
    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Windows;
    using System.Windows.Controls;

    public partial class MainWindow
    {
        private static readonly CultureInfo[] cultureInfos =
            CultureInfo.GetCultures(CultureTypes.NeutralCultures).Take(15).ToArray();

        public MainWindow()
        {
            this.InitializeComponent();
        }

        public static IEnumerable<CultureInfo> AllCultures
        {
            get { return cultureInfos; }
        }

        private void GridInitialized(object sender, EventArgs e)
        {
            var grid = (Grid)sender;
            for ( int i = 0; i < cultureInfos.Length; i++ )
                grid.ColumnDefinitions.Add(new ColumnDefinition
                    {
                        Width = GridLength.Auto,
                        SharedSizeGroup = "g" + i,
                    });
        }

        private void ScrollViewerScrollChanged(object sender, ScrollChangedEventArgs e)
        {
            if ( e.HorizontalChange != 0 )
                this.legendScroller.ScrollToHorizontalOffset(e.HorizontalOffset);
        }
    }
}

Xaml:

<FrameworkElement.Resources>
    <ItemsPanelTemplate x:Key="panelTemplate">
        <Grid Initialized="GridInitialized" />
    </ItemsPanelTemplate>

    <Style TargetType="ContentPresenter" x:Key="containerStyle">
        <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource Self}, Path=(ItemsControl.AlternationIndex)}" />
        <Setter Property="Grid.Column" Value="{Binding RelativeSource={RelativeSource Self}, Path=(ItemsControl.AlternationIndex)}" />
    </Style>

    <Style TargetType="TextBlock" x:Key="textStyle">
        <Setter Property="Padding" Value="5" />
        <Setter Property="Background" Value="Lime" />
        <Setter Property="HorizontalAlignment" Value="Center" />
        <Setter Property="VerticalAlignment" Value="Center" />
    </Style>
</FrameworkElement.Resources>

<DockPanel Grid.IsSharedSizeScope="True" DataContext="{Binding Source={x:Static local:MainWindow.AllCultures}}">

    <ScrollViewer DockPanel.Dock="Top" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Disabled"
            x:Name="legendScroller">
        <ItemsControl ItemsSource="{Binding}" AlternationCount="{x:Static System:Int32.MaxValue}" Margin="0 0 500 0"
                ItemsPanel="{StaticResource panelTemplate}" ItemContainerStyle="{StaticResource containerStyle}">

            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type glob:CultureInfo}">
                    <GroupBox Header="{Binding Name}" HeaderStringFormat="[ {0} ]">
                        <TextBlock Style="{StaticResource textStyle}"
                                Text="{Binding Tag, RelativeSource={RelativeSource AncestorType=ContentPresenter, AncestorLevel=2}}" />
                    </GroupBox>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>

    <TextBlock Foreground="Red" DockPanel.Dock="Top" Margin="0 10" FontSize="20" Text="some random arbitrary content in between" />

    <ScrollViewer HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto" ScrollChanged="ScrollViewerScrollChanged">
        <ItemsControl ItemsSource="{Binding}" AlternationCount="{x:Static System:Int32.MaxValue}"
                ItemsPanel="{StaticResource panelTemplate}" ItemContainerStyle="{StaticResource containerStyle}">

            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type glob:CultureInfo}">
                    <Border Background="DodgerBlue" Padding="5" Margin="1">
                        <GroupBox Header="{Binding DisplayName}">
                            <TextBlock Style="{StaticResource textStyle}" Padding="5 100"
                                    Text="{Binding Tag, RelativeSource={RelativeSource AncestorType=ContentPresenter, AncestorLevel=2}}" />
                        </GroupBox>
                    </Border>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>

</DockPanel>

BTW:如果你把上项“Control”项目的规模(通过在Box集团中添加MinWidth=“200”),那么下项“Control”将 act。

BTW2:从 app开始。 8个共用大小栏目(样本有15个,由<代码>.Take(15)控制),你看到重整出现,每个栏目的时间翻一番——这样20个栏几乎一分钟。

BTW3: 在3个月中没有收到任何意见,令人沮丧。

问题回答

很幸运的是,三个月前,I +1 就这一问题做了回答。 也许,你本人没有得到答复的原因是它困难!

现在我还没有什么话要说的,但世界森林论坛的布局是用两张通行证——措施与安排——来做的,其后要素的划分可能会引发对其他要素的划分。

为了准确地缩小各栏目的规模,世界森林论坛正在采取类似行动:

  • Measure column 1 contents
  • Arrange column 1 contents
  • Measure column 2 contents
    • Wait a sec, column 2 is larger than expected
    • Trigger a measure on all column 1 contents
      • Arrange column 1 contents
      • Measure column 2 contents

......

对我的简单看法表示歉意。 你们有多少栏目(共有大小组的数目)? 另一个问题。 什么是专才和。 该网络框架是你运作的吗? 我听说,例如,在WindowsXP的WPF中,你可能拥有的共有集体小组数目受到限制。 无法确定其是否在后来的任职。

作为一种工作,你能否实施这种行为? 你们能否把自己的附属财产作为衡量电网中每个要素(所有栏目、所有各行)的方法,然后一度确定每栏的大小? 而不是一栏。

Regards,

我也存在同样的问题。 我的准确情况是我如何解决。

我有一个“电网”建筑,顶楼和左栏作为其余部分(如被冻结的Excel囚室)。 内容大小各异,在时间上确定。 还难以预测规模。

为此,我共有4个电网,其中1个是外电网,3个是电网,1个是顶级电网,1个是左栏元素,1个是实际电网。 内容网的浏览量通过一个共用大小组与左栏的浏览量相同,也与内容栏和上列。

为了解决这一问题,我首先把实际电网的数据列入后面的代码。 然后,我称之为“外电网测量和安排”,反对强迫电离层。 https://stackoverflow.com/a/4890217/2352625“https://stackoverflow.com/a/4890217/2352625

通过强迫提供,我拥有每个小组的实际规模,然后我用来为我的头盔(而不是将其固定规模)建立行长和一栏定义。 这还不是完美的——当我展示一个大的电网时——但轮机是小的(几张颜料),而不是像现在这样跳出。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...