使用网格作为 ItemsHost

2023-12-23

我想使用网格作为 ItemsHost,但没有任何项目出现在其绑定(列、行)位置。我怎样才能做到这一点?举个简单的例子:

XAML

<ItemsControl ItemsSource="{Binding DataSet}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Grid.Column="{Binding Col}" Grid.Row="{Binding Row}" Text="{Binding Text}"   />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.Style>
        <Style TargetType="{x:Type ItemsControl}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ItemsControl}">
                        <Grid HorizontalAlignment="Stretch" IsItemsHost="True">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition />
                                <RowDefinition />
                            </Grid.RowDefinitions>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ItemsControl.Style>
</ItemsControl>

代码隐藏

Class Window1 

    Private myTestData As TestData

    Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        myTestData = New TestData()
        Me.DataContext = myTestData
    End Sub

End Class

Class TestData

    Private myDataSet As List(Of DataPoint)
    Public Property DataSet() As List(Of DataPoint)
        Get
            Return myDataSet
        End Get
        Set(ByVal value As List(Of DataPoint))
            myDataSet = value
        End Set
    End Property

    Public Sub New()
        Me.DataSet = New List(Of DataPoint)
        For x As Integer = 0 To 1
            For y As Integer = 0 To 1
                Me.DataSet.Add(New DataPoint(x, y, "Column " + x.ToString + ", Row " + y.ToString))
            Next
        Next
    End Sub

End Class

Class DataPoint

    Private myRow As Integer
    Public Property Row() As Integer
        Get
            Return myRow
        End Get
        Set(ByVal value As Integer)
            myRow = value
        End Set
    End Property

    Private myCol As Integer
    Public Property Col() As Integer
        Get
            Return myCol
        End Get
        Set(ByVal value As Integer)
            myCol = value
        End Set
    End Property

    Private myText As String
    Public Property Text() As String
        Get
            Return myText
        End Get
        Set(ByVal value As String)
            myText = value
        End Set
    End Property

    Public Sub New(ByVal x As Integer, ByVal y As Integer, ByVal name As String)
        Me.Row = y
        Me.Col = x
        Me.Text = name
    End Sub

End Class

因为你正在使用一个ItemsControl,为每个项目生成一个容器。该容器(一个实例ContentPresenter对于一个普通的老ItemsControl) 包裹着TextBlock,并且是的直接子代Grid。因此,Grid甚至从未见过Column and Row上的属性TextBlock因为它正在查看容器。

您可以通过设置来解决这个问题ItemContainerStyle为容器绑定适当的属性:

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <Setter Property="Grid.Column" Value="{Binding Column}"/>
        <Setter Property="Grid.Row" Value="{Binding Row}"/>
    </Style>
</ItemsControl.ItemContainerStyle>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用网格作为 ItemsHost 的相关文章

  • 如何将绑定字符串格式设置到所有 DataGridTextColumn 控件?

    这是我的 DataGridTextColumn 控件之一 如下所示
  • GXT - 根据行中的一个单元格对整个网格行进行着色

    我根据单元格的值对一列进行着色 但我想对 gxt 网格中的整行 意味着单元格包含的行 进行着色帮助我 这是我为单元格着色的代码 我想为行而不是单元格着色 Coloring Area GridCellRenderer
  • 如何使用 WPF 从 XML 文件创建树视图?

    这是 XML 文件
  • WPF 模式进度窗口

    如果这个问题已经被回答了很多次 我很抱歉 但我似乎找不到适合我的答案 我想创建一个模式窗口 在我的应用程序执行长时间运行的任务时显示各种进度消息 这些任务在单独的线程上运行 我能够在过程的不同阶段更新进度窗口上的文本 跨线程通信一切正常 问
  • WPF 中处理系统关闭

    如何在 WPF 中重写 WndProc 当我的窗口关闭时 我尝试检查我正在使用的文件是否被修改 如果是 我必须提示用户 你想保存更改吗 消息 然后关闭正在使用的文件和窗口 但是 当我的窗口仍然打开时 我无法处理用户重新启动 关闭 注销的情况
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • 增加 WPF 弹出动画的持续时间

    我有一个 WPF PopUp 控件 用于显示菜单叠加层 并且使用默认的淡入淡出动画 不过我想让动画需要更长的时间才能完成 我可以在 XAML 中做到这一点吗 你能在这里发布相关的xaml代码吗 否则 您可以查看这些链接以开始使用 xaml
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • OxyPlot WPF 不适用于按钮单击

    我在使用 OxyPlot 时遇到了一些问题 但无法通过他们的文档或其他搜索来解决 我正在开发一个 wpf 应用程序 它允许用户通过按钮单击事件打开 csv 然后执行一些数学运算并报告一些有用的信息 我想绘制一些生成的数据 因此使用 OxyP
  • RelayCommand 未在 MenuItem 单击 WPF MVVM 上触发

    我的 WPF 表单上有一个运行导入例程的菜单项 我已将命令属性绑定到视图模型中的 ICommand 属性 但由于某种原因该方法不会触发 这是 xaml menu height 21 menu
  • ViewModel 中的 TextBox CaretIndex 属性

    是否可以通过视图中定义的 Binding 获取 设置 wpf 视图模型中 TextBox 控件的 CaretIndex 属性的值 Thanks 这里的问题是如何获得CaretIndex of the TextBox通过视图模型进行控制 如果
  • 在 WPF 中将 png 图像合并为单个图像

    我正在寻找一种将一些 PNG 平铺图像合并为大图像的方法 所以我搜索并找到了一些链接 This https stackoverflow com questions 6325057 c sharp combine lots of images
  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 访问 XAML 中的静态字段

    如何在 xaml 中引用类的静态属性 换句话说 我想做这样的事情 Class BaseThingy public static readonly Style BaseStyle
  • 如何从作为 UWP 运行的 WPF 应用程序处理文件激活?

    我有一个WPF我想要处理文件激活的应用程序 我找到了通过向注册表添加特定值来解决问题的解决方案 问题是最终的应用程序应该是UWP应用程序 我正在使用桌面桥来执行此操作 如果应用程序运行为UWP 它无法到达注册表来设置这些特定值 有没有其他方
  • 在 WPF 中使用 Datagrid 进行多重选择

    我想知道如何使用 DataGridCheckBoxColumn 选择多行 这里我只能选择一行 但如何进行多项选择 我的 XAML 如下
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo

随机推荐