Как установить высоту для динамически добавляемого пользовательского элемента управления в стеке?

У нас есть пользовательский элемент управления 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 не очень хорошо работают вместе:

Горизонтальная прокрутка для стековой панели не работает

Другие вопросы по тегам