gpt4 book ai didi

silverlight - 在 Silverlight 3 中使用网格作为 ItemsControl 的 ItemsPanel

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

是否有可能做这样的事情:

    <ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Text}" Grid.Column="{Binding Column}" Grid.Row="{Binding Row}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

项目源类似于具有 Text、Column 和 Row 属性的对象列表。

这可能吗?我真的想让我的数据网格成为数据绑定(bind)。

最佳答案

因为 Silverlight 将每个项目(DataTemplate 的每个实例)包装在 ListBoxItem 中,所以您将无法工作,并且需要将 Grid.Column 和 Grid.Row 附加属性应用于该 ListBoxItem,而不是应用于成为的 TextBox该 ListBoxItem 的内容。

好消息是您可以使用 ListBox.ItemContainerStyle 在隐式 ListBoxItem 上设置属性。

坏消息是 ItemContainerStyle 不支持绑定(bind)。因此,您不能使用它将 Grid.Column 和 Grid.Row 附加属性设置为手头数据项的属性。

我使用的一种解决方案是将 ListBox 子类化并在 PrepareContainerForItemOverride 中设置绑定(bind)。这是一个非常粗略的硬连线示例:

public class GriderrificBox : ListBox
{
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
base.PrepareContainerForItemOverride(element, item);

FrameworkElement fe = element as FrameworkElement;
if (fe != null)
{
BindingOperations.SetBinding(fe, Grid.RowProperty,
new Binding { Source = item, Path = new PropertyPath("Row") });
BindingOperations.SetBinding(fe, Grid.ColumnProperty,
new Binding { Source = item, Path = new PropertyPath("Column") });
}
}
}

用法:
<local:GriderrificBox>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Text}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</local:GriderrificBox>

这段代码有(至少)两个主要的缺点:首先,您仍然需要在 XAML 中显式指定 ItemsPanel,即使该控件仅适用于 Grid 面板;其次,绑定(bind)路径硬连线到代码中。第一个可以通过使用正常的控件默认样式机制来解决,第二个可以通过定义诸如 RowBindingPath 和 ColumnBindingPath 等 PrepareItemForContainerOverride 可以引用而不是使用硬连线路径的属性来解决。希望足以让你继续前进!

关于silverlight - 在 Silverlight 3 中使用网格作为 ItemsControl 的 ItemsPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2391251/

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