В настоящее время я изо всех сил пытаюсь заставить элемент управления отображаться в форме коробки в WPF без необходимости приводить к коду.Вот рабочий пример того, как я хочу, чтобы это выглядело:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
<RowDefinition Height="3" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<Button Margin="6" VerticalAlignment="Stretch" Width="{Binding Path=ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Source="http://blog.joeclarmusic.com/images/rss-icon.jpg" />
<TextBlock Foreground="Black" TextAlignment="Center" Grid.Row="1" FontSize="11" Text="{Binding Path=Name}" Margin="0, 5, 0, 0" HorizontalAlignment="Center" TextWrapping="Wrap" />
</Grid>
</Button>
</StackPanel>
<GridSplitter Grid.Row="1" Background="#DDDDDD" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
</Grid>
Хорошо, это все круто и хорошо.В моем текущем дизайне я использую ItemsControl и отображаю список изображений.Поскольку такой список может превышать ширину окна, я хотел добавить ScrollViewer вокруг StackPanel, где отключен VerticalScrollBar (поскольку я хочу, чтобы он двигался только слева направо, мне нужен только HorizontalScrollBar).
После добавления ScrollViewer:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
<RowDefinition Height="3" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ScrollViewer>
<StackPanel Orientation="Horizontal">
<Button Margin="6" VerticalAlignment="Stretch" Width="{Binding Path=ActualHeight, Mode=OneWay, RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Source="http://blog.joeclarmusic.com/images/rss-icon.jpg" />
<TextBlock Foreground="Black" TextAlignment="Center" Grid.Row="1" FontSize="11" Text="{Binding Path=Name}" Margin="0, 5, 0, 0" HorizontalAlignment="Center" TextWrapping="Wrap" />
</Grid>
</Button>
</StackPanel>
</ScrollViewer>
<GridSplitter Grid.Row="1" Background="#DDDDDD" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
</Grid>
Изображение выше при работе в kaxaml 1.7.1 на моем компьютере: jonatan.nilsson.is/wpf_with_scrollviewer.jpg
Если вы запустите его в Kaxaml(или в окне / странице WPF) ваша кнопка теперь будет увеличиваться и увеличиваться (ширина и высота) .Единственное изменение, которое я сделал, это добавление ScrollViewer вокруг StackPanel.все остальное то же самое, так почему же оно продолжает увеличиваться, когда внутри прокрутки просмотра?
Что я здесь не так делаю?
Редактировать: добавлено изображение результата из второго примера.