【问题标题】:Adding button outside the binded Listbox in xaml在 xaml 中的绑定列表框之外添加按钮
【发布时间】:2017-11-13 20:56:43
【问题描述】:

我遇到了一个问题 - 我创建了一个项目,在该项目中我使用绑定到列表框将我的代码绑定到 xaml。但是,它在我以后的代码中产生了一些问题——我想在我的表单中添加按钮,但是我遇到了一些错误。

'在使用 ItemsSource 之前,Items 集合必须为空。'

当我尝试绑定可绑定列表框之外的内容时,会发生此错误。

属性“VisualTree”只能设置一次。

当我尝试在列表框下方添加按钮时发生此错误。

有人可以指导我如何解决这个问题吗?

我的代码:

<ListBox x:Name="ItemsControl1">
    <ListBox.ItemsPanel>

        <ItemsPanelTemplate>

            <UniformGrid Columns="5">
            </UniformGrid>

        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Border BorderBrush="Black" BorderThickness="2" Width="Auto" Height="Auto">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Number}"/>
                    <Image Source="{Binding Source}" Margin="0,0,5,0"/>
                </StackPanel>
            </Border>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

理想的结果是列表框下方的按钮。

【问题讨论】:

  • “在列表框内,就在它下面”听起来很矛盾。将 Button 除了 ListBox 放入一个公共面板中,例如StackPanel 或网格。
  • 我对您正在尝试的内容有一些模糊的总体概念,但请说明您希望按钮出现在哪里以及为什么它不在列表框之外。
  • @Clemens 哈哈,谢谢我修正了错误。 " 将 Button 放在 ListBox 旁边,放入一个公共面板中,例如 StackPanel 或 Grid。"这是当我收到“在使用 ItemsSource 之前,Items 集合必须为空”时。错误

标签: c# wpf xaml


【解决方案1】:

您应该在下面 ListBox 声明中添加您的按钮。 您面临的异常会被抛出,因为可视化树是通过绑定填充的,您无法再手动更改它。 您需要将所有这些内容放在某个布局容器(GridStackPanel 等)中,因为您不能设置 Window's/UserControl's Content 属性两次:

<StackPanel>
    <ListBox x:Name="ItemsControl1">
        <ListBox.ItemsPanel>

            <ItemsPanelTemplate>

                <UniformGrid Columns="5">
                </UniformGrid>

            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Border BorderBrush="Black" BorderThickness="2" Width="Auto" Height="Auto">
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Number}"/>
                        <Image Source="{Binding Source}" Margin="0,0,5,0"/>
                    </StackPanel>
                </Border>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
    <Button/>
</StackPanel>

【讨论】:

  • 属性“内容”设置了多次。这是我在列表框下方声明按钮时遇到的错误。
  • 将带有按钮的列表框放在某个容器内(例如StackPanelGrid
  • 谢谢!我在列表框周围添加了网格,然后在 stackpanel 的列表下方添加了
猜你喜欢
  • 1970-01-01
  • 2016-03-31
  • 2020-04-07
  • 2018-12-30
  • 2017-06-16
  • 2014-12-29
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多