Я читал так много решений этой проблемы. каждый из них не может решить мою проблему. независимо от того, в каком контейнере я вставляю элемент управления или какие свойства я устанавливаю на элемент управления/контейнере, он не сдвинется с места. У меня есть средство просмотра прокрутки с элементом управления внутри. Я хочу, чтобы он изменялся в зависимости от окна, когда пользователь изменяет его размер во время выполнения. все, что мне нужно, это anchor = верхний, нижний, левый, правый. Я не понимаю, почему это так неуловимо в WPF и почему необходимо задействовать контейнерные объекты и всевозможные назначения свойств для выполнения того, что может иметь одно свойство в Формах. но все решения этой проблемы по-прежнему приводят к тому, что мой контроль остается точно таким же, как размер времени разработки, так как при изменении размера окна во время выполнения. какой простой способ получить доступ к динамическому размеру управления в wpf?
Как изменить размеры элементов управления в wpf, равнозначно свойствам привязки/док-станции
Ответ 1
Это вызвало и мое горе, и Алекс помог мне увидеть свет. Уловкой НЕ является установка высоты и ширины.... Установите их на AUTO
и используйте MARGIN
для установки размера. Установите HORIZONTALALIGNMENT
и VERTICALALIGNMENT
в STRETCH
, а затем функциональность привязки работает.
Ответ 2
Элемент управления должен растягиваться, чтобы все было ему нужно:
<MyControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
Stretch
заменяет настройки акормов на обе соответствующие стороны.
Для справки на панелях см. этот обзор. Также см. Документацию системы компоновки.
Большинство элементов управления автоматически растягиваются, если у вас есть DataGrid, он также должен растягиваться, попробуйте этот образец в Kaxaml, он содержит DataGrid и TextBlock, который показывает его размер:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid Name="grid">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Name"/>
<DataGridTextColumn Binding="{Binding Tag}" Header="Occupation"/>
</DataGrid.Columns>
<FrameworkElement Name="Skeet" Tag="Programmer"/>
<FrameworkElement Name="Gravell" Tag="Programmer"/>
<FrameworkElement Name="Steve" Tag="Coffee Getter"/>
</DataGrid>
<TextBlock Grid.Row="1">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}, {1}">
<Binding ElementName="grid" Path="ActualWidth"/>
<Binding ElementName="grid" Path="ActualHeight"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
</Window>
Если вы размер окна вниз, должны появиться полосы прокрутки DataGrid.
Ответ 3
Я предполагаю, что элемент управления, который не изменяет размер, является вашим настраиваемым элементом управления.
- Используйте DockPanel в качестве контейнера.
- Удалите с вашего элемента явные свойства Width и Height.
Если вы работаете в VS2008, это приводит к неудобствам, потому что вы контролируете падение до минимального размера при просмотре в дизайнере.
Выражения. Смешивание и начало с VS2010 обожают уважать пространство имен дизайнеров, поэтому вы можете указать размер времени управления только для дизайна.
Для этого добавьте следующие элементы управления:
<UserControl ...
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignWidth="WWW" d:DesignHeight="HHH">
....
</UserControl>
d: DesignWidth и d: DesignHeight определяют ширину и высоту времени разработки.
Ответ 4
Этот вопрос старый, но, так как я нашел его здесь, я думал, что выброшу свое решение. Ниже приведен код для элемента управления вкладкой с двумя вкладками, и каждая вкладка содержит элемент управления для заполнения вкладки. Я удалил явно заданную ширину и высоту и установил горизонтальные и вертикальные выравнивания в auto на всех элементах управления, которые я хотел изменить. Элемент управления вкладкой растягивается из главного окна. Элементы управления на вкладках растягиваются, чтобы заполнить вкладки. Информация взята из ответов здесь. Я просто приведу полный пример.
Надеюсь, что это кому-то полезно.
<TabControl HorizontalAlignment="Stretch"
Margin="91,0,0,0" Name="tabControl1"
VerticalAlignment="Stretch" >
<TabItem Header="DataGrid" Name="tabItem1">
<Grid>
<DataGrid AutoGenerateColumns="False"
HorizontalAlignment="Stretch"
Name="dgFTPLog"
VerticalAlignment="Stretch"
Margin="6,6,0,0" />
</Grid>
</TabItem>
<TabItem Header="Log" Name="tabItem2">
<Grid>
<TextBox
HorizontalAlignment="Stretch"
Margin="6,6,0,0" Name="txtLog"
VerticalAlignment="Stretch"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
TextChanged="txtLog_TextChanged" />
</Grid>
</TabItem>
</TabControl>
Ответ 5
Я столкнулся с этими проблемами. и Попытка привязки к родительским элементам управления свойства ActualHeight и ActualWidth, за исключением того, что это работает только, если вы делаете это с помощью кода, не связанного с XAML.
т.е. XAML
<MyParentControl x:name="parentControl" SizeChanged="parentControl_SizeChanged">
<ChildControl x:name=childControl" />
</MyParentControl>
в коде
private void parentControl_SizeChanged(object sender, SizeChangedEventArgs e)
{
childControl.Height = parentControl.ActualHeight;
childControl.Width = parentControl.ActualWidth;
}