WPF:如何使文本框填满所有可用的水平空间?

72 浏览
0 Comments

WPF:如何使文本框填满所有可用的水平空间?

我正在WPF中创建一个表单。表单有带有左侧TextBlock的TextBoxes。带网格线的截图如下:

\"My

我想让它看起来像这样(请原谅MS Paint风格):

\"Desired

问题是:除非我将HorizontalAlignment设置为Stretch,否则文本框非常小,但是如果我这样做,我就不能将它们对齐到左边。如何使包含TextBlock/TextBox的网格左对齐并且使TextBox填充所有可用空间?

如果硬编码宽度,这很容易,但在调整大小时显然无法正常工作。我尝试使用Stack 和 Dock Panel去包含Grids,但没有成功。

我无法使用HorizontalAlignment=Stretch, MaxWidth, and Left aligned at the same time?,因为没有其他控件是我要填充的空间的宽度。

我也无法使用How to get controls in WPF to fill available space?,因为我的xaml中没有HorizontalContentAllignment。我尝试使用ContentControls包装内容并使用ItemsControl强制它,但没有成功。

下面是表单的xaml。请注意,此xaml适用于“创建”标题下和3个按钮右侧的控件。

    
        
        
    
    
        
        
    
    
    
        
            
                
                
            
            
            
        
        
            
                
                
            
            
            
        
    

FormTextBox的样式如下:

 

它会将角落圆化、更改背景颜色,并删除如果在你alt-tab键移出并回到应用程序之前已选择的虚线。

admin 更改状态以发布 2023年5月24日
0
0 Comments

您指出这是期望的布局:

enter image description here

您当前的代码存在一些问题。首先,使用DockPanel来托管TextBlock/TextBox对,其次,没有控件设置Grid.IsSharedSizeScope=true。您还定义了一个文本框列的共享大小,而实际上您只想让其使用所有可用空间。

以下是实现所需布局的代码:


    
        
        
    
    
        
        
    
    
    
        
            
        
        
            
                
                    
                    
                
                
                
            
        
        
            
                
                    
                    
                
                
                
            
        
    

此代码产生:

enter image description here

但实际上,如果您追求最大的可用性,您需要为TextBlock/TextBox创建自己的控件,然后就可以将其放入某种ItemsControl中以获得动态内容。

0