У меня есть сетка внутри средства просмотра прокрутки, размер которой я хочу изменять по мере добавления содержимого. В настоящее время он не изменяется, если я добавляю кнопку вне поля зрения. Что странно ... но не моя главная забота. Меня больше всего беспокоит то, что если я добавлю элементы в сетку программно, изменится ли она размер. Если нет, то что я должен использовать, чтобы изменить его размер.

Вот текущая идея

<DockPanel HorizontalAlignment="Left" Height="266" LastChildFill="False" VerticalAlignment="Top" Width="434">
    <Menu Height="20" VerticalAlignment="Top" DockPanel.Dock="Top">
        <MenuItem Header="MenuItem">
            <MenuItem Header="MenuItem" HorizontalAlignment="Left" Width="145"/>
        </MenuItem>
    </Menu>
    <ScrollViewer DockPanel.Dock="Bottom" Height="246" RenderTransformOrigin="0.5,0.5">
        <Grid Height="173" Width="100"/>

    </ScrollViewer>
</DockPanel>
0
Ya Wang 16 Дек 2014 в 06:33

2 ответа

Лучший ответ

То, как вы пытаетесь использовать сетку, не так, как она работает. Чтобы он работал, вы должны определить как минимум строку или столбец. Затем вы можете разместить элементы управления в определенных строках и столбцах. Похоже, в вашем случае вам нужна только одна строка и столбец. Он находится в определении строки / столбца, где вы определяете размер и то, следует ли его изменять или нет.

<ScrollViewer DockPanel.Dock="Bottom" Height="246" RenderTransformOrigin="0.5,0.5">
    <Grid>
        <!--Define rows and columns-->
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>            
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>

        <!--Place a control in the grid-->
        <Button Grid.Row="0" Grid.Column="0" Width="100" Height="100"/>
    </Grid>
</ScrollViewer>

Для свойств Height и Width задано значение Auto. Это означает, что они подстроятся под размер контента. Например, в приведенном выше примере высота и ширина кнопки установлены на 100. Это означает, что строка и столбец сохранят эти значения.

0
PiotrWolkowski 16 Дек 2014 в 06:58

Привет, попробуйте удалить Width = "434" из DockPanel и другие ширины из вашего элемента управления Width = "100", если ширина фиксирована, чем вы не можете изменить размер, вы должны удалить свойство ширины, я надеюсь, что это сработает

РЕДАКТИРОВАТЬ: вы можете использовать StackPanel Enstead Grid, ваша проблема заключалась в том, что когда вы добавляете какой-то элемент, он добавляет верх другого элемента. код xaml:

 <DockPanel HorizontalAlignment="Left" VerticalAlignment="Top"  >
    <Menu Height="20" VerticalAlignment="Top" DockPanel.Dock="Top">
        <MenuItem Header="MenuItem">
            <MenuItem Header="MenuItem" HorizontalAlignment="Left" Width="145"/>
        </MenuItem>
    </Menu>
    <ScrollViewer DockPanel.Dock="Bottom" >
        <StackPanel Name="uiStack" Orientation="Vertical">


        </StackPanel>
    </ScrollViewer>
    <Button Content="Click me" Click="Button_Click"></Button>
</DockPanel>

CodeBehind:

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        uiStack.Children.Add(new Button() { Content = "Button1" });
        uiStack.Children.Add(new TextBlock() { Text = "Button1" }); 
    }
0
Jamaxack 16 Дек 2014 в 07:00
Во всех смыслах и целях я пытаюсь иметь переменную вертикальную ось (так что высота). Также да, я пытался установить все на авто. Я не могу изменить размер сетки в соответствии с содержимым, если добавлю ее вручную, поэтому я предполагаю, что это будет то же самое программно.
 – 
Ya Wang
16 Дек 2014 в 06:49