HorizontalAlignment=Stretch,MaxWidth和Left同时对齐?

30 浏览
0 Comments

HorizontalAlignment=Stretch,MaxWidth和Left同时对齐?

这个问题看起来应该很简单,但我却束手无策。在WPF中,我想要一个文本框,它的宽度可以伸展到父元素的宽度,但有一个最大宽度限制。问题是,我希望它在父元素中左对齐。为了使其伸展,你必须使用HorizontalAlignment="Stretch",但结果是居中对齐。我尝试过使用HorizontalContentAlignment,但似乎没有任何效果。

如何使这个蓝色文本框随窗口大小而增长,最大宽度为200个像素,并且左对齐?


    
    
  

有什么诀窍吗?

0
0 Comments

在这个问题中,原作者在实际应用中尝试将一个面板限制在一个滚动视图中,但是之前给出的解决方法并不能很好地处理这个问题。控件仍然可以超出MaxWidth的设置,导致无法达到预期的效果。

因此,原作者选择了另一种解决方法,即使用Nir的技巧。这种方法不会出现与滚动视图相关的问题。然而,需要注意的是,要将TextBox的右边距和左边距设置为0,否则它们会干扰布局。此外,为了避免在垂直滚动条出现时出现问题,原作者还将绑定更改为使用ViewportWidth而不是ActualWidth。

这个问题的原因是之前给出的解决方法无法处理滚动视图中的面板约束问题,而解决方法是使用Nir的技巧,并注意设置TextBox的边距和更改绑定。以下是示例代码:


   
      
   

0
0 Comments

问题的原因是想要在水平方向上将元素拉伸(HorizontalAlignment=Stretch),同时设置最大宽度(MaxWidth),并且让元素左对齐(Left aligned)。

解决方法是将元素放在一个Grid中,并设置Grid的列定义(ColumnDefinition)。通过指定列宽为"*",可以将元素水平拉伸。然后,通过设置MaxWidth属性,可以限制元素的最大宽度。最后,通过设置元素的垂直对齐方式为顶部(VerticalAlignment="Top"),可以实现左对齐效果。

以下是解决问题的代码示例:


    
        
    
    

这样设置后,文本框会在水平方向上拉伸,并且最大宽度为200。同时,文本框会左对齐。注意,这个解决方法适用于Windows Store应用程序。如果想要在WinRT中绑定元素的最大宽度到另一个元素的ActualWidth属性,可以使用MaxWidth="{Binding ActualWidth, ElementName=Layout}"的方式来实现。需要注意的是,如果有多个列,通过设置MaxWidth会将后面的列也拉向左对齐。

0
0 Comments

问题的原因是设置了HorizontalAlignment为Left,同时设置了MaxWidth,但是文本框的宽度没有自动调整,而是根据内容的大小来确定宽度。这可能导致布局出现问题,甚至可能导致Silverlight播放器崩溃。

解决方法是在Container元素上设置HorizontalAlignment="Stretch"。这样可以将容器的宽度拉伸到适应父元素的宽度,从而使文本框的宽度也自动调整。这个解决方法适用于Silverlight版本。

下面是修复后的代码示例:

<Page

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<StackPanel Name="Container" HorizontalAlignment="Stretch">

<TextBox Background="Azure"

Width="{Binding ElementName=Container, Path=ActualWidth}"

Text="Hello" HorizontalAlignment="Left" MaxWidth="200" />

</StackPanel>

</Page>

通过将Container元素的HorizontalAlignment属性设置为Stretch,可以解决文本框宽度不自动调整的问题,并确保布局正确。这个解决方法适用于Silverlight版本。

0