WPF网格中重叠的按钮单元格

Posted

技术标签:

【中文标题】WPF网格中重叠的按钮单元格【英文标题】:Overlapping button cells in WPF grid 【发布时间】:2021-12-30 22:49:22 【问题描述】:

我想实现按钮的二次网格,例如没有网格单元重叠。

同样重要的是,按钮应位于每个单元格的中心,并且彼此之间有明显的间隙。

<Grid  Margin="0,0,0,-6" 
      RenderTransformOrigin="0.505,0.323" 
      HorizontalAlignment="Right" 
      Width="810" Height="610" 
      VerticalAlignment="Bottom">

这是我一直在使用的代码 sn-p (MainWindow.xaml.cs):

for (int i = 0; i < gridSize; i++)

    RowDefinition r = new RowDefin
    r.Height = new GridLength(1000, GridUnitType.Star);
    grid.RowDefinitions.Add(r);
                
    for (int j = 0; j < gridSize; j++)
    
                    ColumnDefinition c = new ColumnDefinition();
                    c.Width = new GridLength(20, GridUnitType.Star);
                    grid.ColumnDefinitions.Add(c);

                    Button b = new Button();
                    b.Width = 20;
                    b.Height = 20;
                    
                    b.Background = Brushes.Transparent;
                    Grid.SetRow(b, i);
                    Grid.SetColumn(b, j);
                    grid.Children.Add(b);

    

不幸的是,这会产生看似重叠的配置。所以我的问题是我应该如何解决重叠问题并在各个按钮之间构建空间。

【问题讨论】:

您是否有理由不在 XAML 中执行此操作? 你不应该使用绝对值,使用相对值作为宽度和高度 我想在MVVM的上下文中动态实现按钮网格设置。 【参考方案1】:

您需要做的是更加熟悉 WPF 标准控件。我相信您所寻求的是UniformGridTextBlock 的某种组合。

<UniformGrid  Height="100" Width="120">
    <UniformGrid.Resources>
        <Style x:Name="BorderStyle" TargetType="Border">
            <Setter Property="Height" Value="40"/>
            <Setter Property="Width" Value="40"/>
            <Setter Property="BorderBrush" Value="Red"/>
            <Setter Property="BorderThickness" Value="2"/>
            <Setter Property="Background" Value="Brown"/>
        </Style>
        <Style x:Name="TextBlockStyle" TargetType="TextBlock">
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Bottom"/>
            <Setter Property="Foreground" Value="Wheat"/>

        </Style>                
    </UniformGrid.Resources>
    <Border>
        <TextBlock Text="Pizza"/></Border>
    <Border>
        <TextBlock Text="Pizza"/>
    </Border>
    <Border >
        <TextBlock Text="Pizza"/>
    </Border>
    <Border>
        <TextBlock Text="Pizza"/>
    </Border>
</UniformGrid>

这为您提供了一个基本的网格模式,由您决定是否满足您的需要:

项目的 MVVM 仅用于存储数据。然后可以将该数据插入到控件中以动态创建项目。

【讨论】:

以上是关于WPF网格中重叠的按钮单元格的主要内容,如果未能解决你的问题,请参考以下文章

获取一个文本框以填充 WPF 中的网格单元格

WPF 数据网格。无法突出显示自定义样式的单元格

读取自定义Datagrid的每个单元格数据 - WPF C#

如何将数据放入WPf数据网格特定单元格中

当我使用按钮增加单元格高度时,UICollectionView 单元格相互重叠

如何获得一个 WPF 数据网格,其中包含环绕文本而不是截断文本的单元格?