У меня есть следующее DataTemplate
, где внутри находится Grid
с «TextBlock» и TextBox
, которые я хочу выровнять по центру:
<DataTemplate x:Key = "OneSettingsEntryTemplate" DataType = "{x:Type templateHelper:InputText}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "*" />
<ColumnDefinition Width = "*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column = "0"
Style = "{StaticResource StandardTextBlocksStyle}"
Text = "{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBox Grid.Column = "1"
Style = "{StaticResource DefaultTextBoxesStyle}"
Text = "{Binding Content, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</DataTemplate>
В одном из моих UserControls
у меня есть следующий код, где я использую шаблон:
<StackPanel DataContext = "{Binding ElementName=ControlForProjectSettings, Path=ViewModel}"
HorizontalAlignment = "Center">
<TextBlock Style = "{StaticResource HeadingTextBlocksStyle}"
Text = "Project settings"/>
<ListView Background = "#DAE7F5"
ItemsSource = "{Binding ProjectSettingEntries}"
ItemTemplate = "{StaticResource OneSettingsEntryTemplate}">
</ListView>
</StackPanel>
Когда я запускаю свое приложение и отображаю некоторые элементы, последний элемент имеет более длинный текст, и поэтому TextBox переворачивается вправо. Изображение приложения
Я пытался поиграть со свойствами HorizontalAlignment
и VerticalAlignment
внутри сетки или использовать DockPanel
вместо сетки, но не смог найти решения. Есть идеи?
Да, это решило мою проблему. Спасибо!
Благодаря этому источнику: WPF разделяет ширину столбца между отдельными сетками Я решил свою проблему.
Я добавил IsSharedSizeScope
к своему Grid
и свойству SharedSizeGroup
к своим столбцам.
<Grid IsSharedSizeScope = "True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width = "Auto" SharedSizeGroup = "A"/>
<ColumnDefinition Width = "Auto" SharedSizeGroup = "A"/>
</Grid.ColumnDefinitions>
Думаю, это вам поможет: stackoverflow.com/a/2265714/4112136