Подтвердить что ты не робот

Как изменить размеры элементов управления в wpf, равнозначно свойствам привязки/док-станции

Я читал так много решений этой проблемы. каждый из них не может решить мою проблему. независимо от того, в каком контейнере я вставляю элемент управления или какие свойства я устанавливаю на элемент управления/контейнере, он не сдвинется с места. У меня есть средство просмотра прокрутки с элементом управления внутри. Я хочу, чтобы он изменялся в зависимости от окна, когда пользователь изменяет его размер во время выполнения. все, что мне нужно, это anchor = верхний, нижний, левый, правый. Я не понимаю, почему это так неуловимо в WPF и почему необходимо задействовать контейнерные объекты и всевозможные назначения свойств для выполнения того, что может иметь одно свойство в Формах. но все решения этой проблемы по-прежнему приводят к тому, что мой контроль остается точно таким же, как размер времени разработки, так как при изменении размера окна во время выполнения. какой простой способ получить доступ к динамическому размеру управления в wpf?

4b9b3361

Ответ 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;
    }