Как установить высоту для динамически добавляемого пользовательского элемента управления в стеке?
У нас есть пользовательский элемент управления wpf (UserControl.xaml) в одной DLL (Child.dll).
Мы добавили ссылку "Child.dll" в другое приложение (ParentApplication)
В родительском приложении у нас есть одна панель стека, в которую мы должны динамически добавлять пользовательский элемент управления, используя конструктор пользовательских элементов управления.
ParentApplication содержит:
MainWindow.xaml
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:fa="http://schemas.fontawesome.io/icons/" x:Class="ParentApplication.MainWindow"
xmlns:Mvis="clr-namespace:Mvis;assembly=Mvis"
Title="MainWindow" Height="1000" Width="1000" WindowStartupLocation="CenterScreen" WindowState="Maximized">
<Grid>
<TabControl>
<TabItem Cursor="Hand">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="ChildApplication"/>
</StackPanel>
</TabItem.Header>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True" Grid.Row="0" >
<StackPanel x:Name="userControlPlaceHolder" Background="Blue"/>
</ScrollViewer>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>
Итак, мы делаем это следующим образом на MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
UserControl userControl = new UserControl();
this.userControlPlaceHolder.Children.Add(userControl);
}
}
Проблема 1: Пользовательский элемент управления отображается только на половине высоты экрана.
** Примечание: мы не установили никакой высоты для UserControl.xaml, и мы не можем установить высоту контроля высоты, как userControl.Height=200; **
Проблема 2: Мы использовали средство просмотра прокрутки в MainWindow.xaml, но при изменении размера окна приложения вертикальная полоса прокрутки не отображается.
1 ответ
Удалить StackPanel
и добавить UserControl
прямо к ScrollViewer
:
<TabItem Cursor="Hand">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="ChildApplication"/>
</StackPanel>
</TabItem.Header>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<ScrollViewer x:Name="sv" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True" Grid.Row="0" >
</ScrollViewer>
</Grid>
</TabItem>
this.sv.Content = userControl;
ScrollViewers
а также StackPanels
не очень хорошо работают вместе: