WPF добавляет элемент в пользовательский элемент управления через DependencyProperty - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь добавить элементы управления через DependencyProperty, сначала имейте этот пользовательский элемент управления:

<UserControl x:Class="Project.Common.Controls.SaveFromSource" ...>
    <Grid x:Name="grid">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid Grid.Row="0"/>
    </Grid>
</UserControl>

В коде behing это:

namespace Project.Common.Controls
{
    public partial class SaveFromSource : UserControl
    {
        public static readonly DependencyProperty GridProperty = DependencyProperty.Register("Grid", typeof(Grid), typeof(FilterFromSource));

        public Grid Grid
        {
            get { return (Grid)GetValue(GridProperty); }
            set { SetValue(GridProperty, value); }
        }

        public SaveFromSource()
        {
            InitializeComponent();

            if (this.Grid != null)
            {
                this.grid = this.Grid;
            }
        }
    }
}

И в новом окне это:

<controls:SaveFromSource>
    <controls:SaveFromSource.Grid>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>

            <TextBox Grid.Row="0" Text="CONTROL 1"/>
            <TextBox Grid.Row="1" Text="CONTROL 2"/>
        </Grid>
    </controls:SaveFromSource.Grid>
</controls:SaveFromSource>

Вопрос в том, почему текстовое поле не отображается в пользовательском элементе управления?

** Мне нужно динамически добавлять элементы управления в пользовательский элемент управления, чтобы повторно использовать код.

Спасибо за помощь.

1 Ответ

0 голосов
/ 06 августа 2020

Добро пожаловать в SO!

Чтобы расширить комментарий Клемена, вам не нужен Grid DP. Вместо этого просто сделайте это в своем UserControl:

<!--<Grid Grid.Row="0"/>    <--- get rid of this        -->
<ContentPresenter Grid.Row="0" />

А затем в родительском классе добавьте содержимое напрямую:

<controls:SaveFromSource>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>

        <TextBox Grid.Row="0" Text="CONTROL 1"/>
        <TextBox Grid.Row="1" Text="CONTROL 2"/>
    </Grid>
</controls:SaveFromSource>

Если ваша причина для этого в том, что вам нужно более одного content, тогда вам придется добавить дополнительные DP для этого в свой UserControl и привязать к нему в своем XAML с помощью ContentControls.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...