ryanba29 Ответов: 1

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


Я создаю довольно простой пользовательский элемент управления, который лучше всего описать как похожий на границу с некоторыми пользовательскими свойствами зависимостей. Я хотел бы поместить то, что когда-либо пользователь размещает в качестве контента, в центр моего пользовательского контроля. Hear-это урезанный макет того, что я пытаюсь сделать.

<usercontrol1>
   <grid>
     <border>
        <"this is where i would like content to load="">
     <border>
   <grid>
<usercontrol1>


Таким образом, при использовании в XAML нижеприведенное приведет к текстовому блоку, окруженному рамкой.

<window>
   <usercontrol1>
      <textblock text="Surround me with a border" margin="5">
   <usercontrol1>
<window>


Это всего лишь макет, и он не будет компилироваться. У меня нет IDE там, где я нахожусь. Если никто не ответит до того, как я завтра пойду на работу, я обновлю его действительным кодом. Также помните,что мой фактический пользовательский контроль имеет гораздо больше. Я раздел это, чтобы упростить вопрос, поэтому, пожалуйста, не предоставляйте ответы, которые предлагают не использовать пользовательский элемент управления, если только это не связано с тем, что мне нужно будет использовать пользовательский элемент управления.

Что я уже пробовал:

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

Philippe Mori

Ну, следующий поиск может дать вам некоторые подсказки : Бинг: элемент управления WPF декоратор Я не знаю достаточно о WPF, чтобы помочь вам больше.

ryanba29

Спасибо, Филипп. Я нашел некоторую полезную информацию об использовании шаблона элемента управления с пользовательским элементом управления, который выглядит так, как будто он может делать то, что мне нужно здесь https://www.codeproject.com/articles/82464/how-to-embed-arbitrary-content-in-a-wpf-control. Я попробую.

ryanba29

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

Philippe Mori

Ну а еще лучше дать ответ из других комментариев, чтобы вообще не иметь ответа. Я не очень экспериментирую с WPF. Единственное, что я сделал, - это угадал относительно хорошую отправную точку поискового запроса.

1 Ответов

Рейтинг:
9

ryanba29

Используя Совет Филиппа Мориса, я могу сказать, что content presenter должен быть применен с помощью ControlTemplate или просто дважды установить свойство content, и именно поэтому весь мой элемент управления был заменен пользовательским контентом. Следующий код работал для меня, но после сборки проекта конструктор XAML выдает ошибку "MyControl" ControlTemplate TargetType не соответствует шаблонному типу "UserControl". Это ошибка, и удаление папок bin и obj из проекта устраняет ошибку,и конструктор можно использовать снова, пока он не будет перестроен.

<UserControl x:Class="WpfApplication20.MyControl"

             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

             xmlns:local="clr-namespace:WpfApplication20"

             mc:Ignorable="d">
    <UserControl.Template>
        <ControlTemplate TargetType="{x:Type local:MyControl}">
            <Border Background="Black" BorderBrush="Black">
                <ContentPresenter></ContentPresenter>
            </Border>
        </ControlTemplate>
    </UserControl.Template>
</UserControl>


Philippe Mori

Для полноты картины было бы неплохо, если бы вы предоставили ссылки, которые были бы полезны для вас, и немного больше объяснений (или кода) о том, как это используется.