Можно установить HorizontalAlignment
на Левый, установить Ваш MaxWidth
и затем связать Width
с ActualWidth
из родительского элемента:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Name="Container">
<TextBox Background="Azure"
Width="{Binding ElementName=Container,Path=ActualWidth}"
Text="Hello" HorizontalAlignment="Left" MaxWidth="200" />
</StackPanel>
</Page>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MaxWidth="200"/>
</Grid.ColumnDefinitions>
<TextBox Background="Azure" Text="Hello" />
</Grid>
Оба данные ответа работали на проблему, которую я заявил - Спасибо!
В моем реальном приложении, хотя, я пытался ограничить панель в ScrollViewer, и метод Кента не обработал это очень хорошо по некоторым причинам, я не потрудился разыскивать. В основном средства управления могли расшириться вне установки MaxWidth и победили мое намерение.
техника Nir работала хорошо и не имела проблемы с ScrollViewer, хотя существует одна незначительная вещь не упустить. Вы хотите быть уверенными, что правые и левые поля на TextBox установлены на 0, или они помешают. Я также изменил привязку для использования ViewportWidth вместо ActualWidth для предотвращения проблем, когда вертикальная полоса прокрутки появилась.
Функционально подобный принятому ответу, но не требует, чтобы родительский элемент был указан:
<TextBox
Width="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type FrameworkElement}}}"
MaxWidth="500"
HorizontalAlignment="Left" />