关于WPF网格控件,我有一个非常简单的问题.
我想在网格中的每一行设置一个底部边框,但只能找到如何在每个单元格周围放置所有4个边框..我的代码非常简单
<Grid Height="174" HorizontalAlignment="Left" Margin="23,289,0,0" Name="grid2" VerticalAlignment="Top" Width="730">
<Grid.RowDefinitions>
<RowDefinition Height="45" />
<RowDefinition Height="25" />
<RowDefinition Height="25" />
<RowDefinition Height="25" />
<RowDefinition Height="25" />
<RowDefinition Height="25" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="255" />
<ColumnDefinition Width="95" />
<ColumnDefinition Width="95" />
<ColumnDefinition Width="95" />
<ColumnDefinition Width="95" />
<ColumnDefinition Width="95" />
</Grid.ColumnDefinitions>
</Grid>
Run Code Online (Sandbox Code Playgroud)
对于我正在使用的另一个网格需要所有四个边界,我正在使用
<Border Grid.Column="0" Grid.Row="0" BorderBrush="#61738B" BorderThickness="1" />
Run Code Online (Sandbox Code Playgroud)
PS网格的内容是一些标签,文本框等.如果这很重要的话.
感谢任何指针.
中号
Width通过设置为 来使三列具有相同的宽度Auto。
<Grid x:Name="myGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0">One</Label>
<Label Grid.Row="0" Grid.Column="1" x:Name="label1">Two</Label>
<Label Grid.Row="0" Grid.Column="2">Three</Label>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我想实现的是,如果中间列折叠或隐藏,则其他两列占用剩余空间并获得相同的宽度。
如果我只是因为宽度=“*”而将可见性设置为折叠或隐藏,则其他两列宽度保持不变。
<Label Grid.Row="0" Grid.Column="1" Visibility="Collapsed">Two</Label>
Run Code Online (Sandbox Code Playgroud)
我通过以编程方式将第二列宽度设置为自动来实现所需的功能,但我正在寻找其他一些解决方案(最好是 xaml 方式一)。
private void Button_Click(object sender, RoutedEventArgs e)
{
this.myGrid.ColumnDefinitions[1].Width = GridLength.Auto;
this.label1.Visibility = Visibility.Collapsed;
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义的WPF元素RowDefinition,当Collapsed元素的属性设置为时,该元素应该折叠网格中的行True.
它通过使用样式中的转换器和数据触发器将行的高度设置为0来实现.它基于此SO答案.
在下面的示例中,当网格分割器超过窗口的一半时,这非常有效.但是,当它不到一半时,行仍然会崩溃,但第一行不会展开.相反,过去的行只有一个白色的间隙.这可以在下图中看到.
同样,如果在任何折叠的行上设置MinHeight或者MaxHeight设置,则它根本不会折叠该行.我尝试通过在数据触发器中为这些属性添加setter来修复此问题,但它没有修复它.
我的问题是什么可以做不同的,这样也没关系有关行的大小或者MinHeight/ MaxHeight设置,它只是能够折叠行?
MCVE
MainWindow.xaml.cs
using System;
using System.ComponentModel;
using System.Globalization;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace RowCollapsibleMCVE
{
public partial class MainWindow : INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private bool isCollapsed;
public bool IsCollapsed
{
get => …Run Code Online (Sandbox Code Playgroud) 我在整个网格上拉伸按钮时遇到问题.
我的代码看起来像这样:
<Grid x:Name="LayoutRoot" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="8*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="5" Grid.Row="1" Width="Auto" Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Button Content="Search" Background="#FF13D38D" Click="searchButton_Click" FontSize="48"/>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
但它对我不起作用,并在整个网格上拉伸按钮,我尝试了maxwidth/maxheight但它也没有正常工作任何人都有想法?
我有以下XAML:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="0,0" Grid.Column="0" Background="Yellow" />
<TextBlock Text="1,0" Grid.Column="1" Background="SkyBlue" />
<GridSplitter Width="20" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Stretch" ShowsPreview="True" />
<TextBlock Text="3,0" Grid.Column="3" Grid.Row="0" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
当只有一个ColumnDefinition用Width的Auto,在GridSplitter正常工作.然而,一旦存在与多个列Width的Auto,所述第一Auto列中的时也被调整大小GridSplitter移动(可在细胞中可以看出1,0).
在调整大小之前:
调整大小后:
如何防止GridSplitter调整第二列的大小?
我Grid里面有很多按钮。这些按钮应该无缝连接。在大多数情况下,这实际上是可行的,但有时在网格的列/行之间会有白色条纹:
我通过这样的代码将按钮添加到网格中(对于非最小代码,我感到抱歉,但是我真的不知道在这里有什么用):
public partial class MainWindow
{
private int _xCount;
private int _yCount;
public MainWindow ()
{
InitializeComponent ();
SetSize (40, 40);
}
public void SetSize (int x, int y)
{
_xCount = x;
_yCount = y;
Grid.ColumnDefinitions.Clear ();
Grid.RowDefinitions.Clear ();
for (var i = 0; i < x; i++)
Grid.ColumnDefinitions.Add (new ColumnDefinition {Width = new GridLength (100, GridUnitType.Star)});
for (var i = 0; i < y; i++)
Grid.RowDefinitions.Add (new RowDefinition {Height = new GridLength (100, GridUnitType.Star)});
for …Run Code Online (Sandbox Code Playgroud)