Динамически созданная фигурная панель с вложенными элементами управления (также динамически создаваемыми) внутри, которые также имеют собственные формы - PullRequest
0 голосов
/ 30 декабря 2018

В настоящее время у меня есть класс, который наследуется от Control, и я придаю ему индивидуальную форму, установив его стиль в стиле, определенном в ресурсах xaml:

<Style x:Key="ParameterStyle" TargetType="{x:Type local:ParameterUI}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:ParameterUI}">
                <Canvas>
                    <Ellipse 
                    x:Name="component" 
                    HorizontalAlignment="Left" Height="50" 
                    Margin="0,0,0,50" Stroke="#FF8E8E9F" 
                    VerticalAlignment="Top" Width="50" 
                    StrokeThickness="1.5" Fill="#FF202020"/>
                </Canvas>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Мне удалось определить все виды мышисобытия на этом элементе управления и заставить его вести себя так, как я хочу.Теперь я хочу динамически добавлять вложенные элементы управления в этот элемент управления, и я хочу, чтобы каждый из этих вложенных элементов управления имел пользовательские фигуры, события мыши и т. Д., Все они были определены во время выполнения.Почти ни один пользовательский интерфейс не является статическим, поэтому все определяется во время выполнения.Я попытался добавить элементы управления, кнопки как визуальные дочерние элементы, логические дочерние элементы, и ничего не отображается в пользовательском интерфейсе.Я даже не вижу ничего в живом визуальном дереве.Что я здесь не так делаю?Должен ли я придерживаться другого подхода?Как я могу получить доступ к Style> Setter.Value> ControlTemplate> Canvas во время выполнения, чтобы добавить к нему больше контента?Кроме того, содержание отличается для каждого экземпляра элемента управления.

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

1 Ответ

0 голосов
/ 31 декабря 2018

В будущем вы избавите себя от головной боли, если будете все делать правильно и использовать привязку данных вместо непосредственного манипулирования элементами GUI, но если будете настаивать ...

Вам нужно использоватьVisual Tree Helper для обхода элемента управления, чтобы найти шаблонный элемент рамки.Вам также может понадобиться сначала позвонить ApplyTemplate, чтобы убедиться, что ваш элемент управления настроен и готов к доступу:

yourTemplatedControl.ApplyTemplate();
var canvas = VisualTreeHelper.GetChild(yourTemplatedControl, 0) as Canvas;

var ellipse = new Ellipse();
ellipse.HorizontalAlignment = System.Windows.HorizontalAlignment.Left;
ellipse.VerticalAlignment = System.Windows.VerticalAlignment.Top;
ellipse.Width = 50;
ellipse.Height = 50;
ellipse.Margin = new Thickness(0, 0, 0, 50);
ellipse.Stroke = Brushes.Blue;
ellipse.StrokeThickness = 1.5;
ellipse.Fill = Brushes.Yellow;
canvas.Children.Add(ellipse);

В этом коде я только что предположил, чтопервым элементом в шаблоне будет Canvas, на практике вы можете предпочесть поискать в визуальном дереве свой элемент canvas (для получения дополнительной информации см. здесь и здесь ).

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