gpt4 book ai didi

.net - 命名为 RowDefinition 的网格无法作为 WPF4 中的 ItemsPanel 填充

转载 作者:行者123 更新时间:2023-12-04 16:12:45 27 4
gpt4 key购买 nike

我在 ItemsControl ItemsPanelTemplate 中定义了一个网格,其中一个 RowDefinitions 定义了一个 x:Name(因此我可以为行大小设置动画)。

<ItemsControl ItemsSource="{Binding Data, Source={StaticResource model}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition x:Name="t" />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>

这在 3.5 中运行良好,但是当我们最近升级到 4.0 时,一切都崩溃了。我会看到一个具有定义的行和列定义但没有子项的网格。

如果我在网格上设置 IsItemsHost=true,一切都会开始工作。如果我将 x:Name 添加到 Grid 本身,或者从 RowDefinition 中删除 x:Name,则一切正常。
<ItemsPanelTemplate>
<Grid IsItemsHost="True">
<Grid.RowDefinitions>
<RowDefinition x:Name="t" />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>

或者
<ItemsPanelTemplate>
<Grid x:Name="g">
<Grid.RowDefinitions>
<RowDefinition x:Name="t" />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
</ItemsPanelTemplate>

这似乎是一个错误,但我想与社区核实一下,看看人们是否同意,或者我是否忽略了某些事情。我在 Connect 或网络上找不到任何内容,所以谁能解释一下我所看到的?

最佳答案

我不相信这是一个错误。您在这里所做的是无意中在您的代码中引入了一个错误,该错误不会在设计或编译时抛出异常,而是在运行时抛出异常,因此您的动画没有完成并且网格的内容没有呈现。

冲突在 WPF XAML Namescope专供DataTemplate如本 MSDN article 中所述.文章确实声明模板中的命名元素会自动赋予唯一的 Namescope以防止名称冲突,但它没有告诉我们当模板根目录未命名但包含命名子项时会发生什么,或者 IsItemsHost 是如何发生的。影响 ItemsTemplate .

  • 我可以建议的一种方法是使用您的原始场景,并在调试期间,密切关注您的输出日志,以查找与您的动画相关的 XAML 解析器已悄悄削弱的任何运行时异常。
  • 另一种(我个人认为,更好)的方法是创建一个新的“模板控件”,它继承自 ItemsControl .在这里,您可以访问 ItemsPanel期间ApplyTemplate重载寻找您的 Grid/GridColumn并在那里执行动画。这里有个好消息tutorial .
  • 关于.net - 命名为 RowDefinition 的网格无法作为 WPF4 中的 ItemsPanel 填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533926/

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