C # WPF, как изменить x: FieldModifier в коде? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть абстрактный Usercontrol, который включает Shape и Textbox.Поэтому, если я создаю класс, который наследует мой Usercontrol, я могу сказать, что Shape является прямоугольником, а в текстовом поле я могу сказать, что он содержит текст типа «прямоугольник».Я дал каждой фигуре и текстовому полю Имя, но не могу достать их по имени.Поэтому мне нужно сделать те Public, которые, насколько я знаю, возможны только с x: Fieldmofifier, который я могу использовать только в редакторе XAML.Так есть ли способ сделать эти Shape & Textbox общедоступными?(Извините за мой плохой английский)

abstract public partial class Tool : UserControl
{
    public Tool(int marginRight, Shape shape,string text, string name)
    {
        InitializeComponent();
        this.DataContext += null;
        grid.Margin = new Thickness(0, 0, 0, 0) { Right = marginRight };
        Width = 60;
        Height = 60;
        shape.Stroke = Brushes.Black;
        shape.StrokeThickness = 0.50;
        shape.Fill = Brushes.White;
        shape.VerticalAlignment = VerticalAlignment.Center;
        shape.HorizontalAlignment = HorizontalAlignment.Center;
        grid.Children.Add(shape);
        shape.Name = "sp_shape";

        TextBox textblock = new TextBox()
        {
            IsReadOnly = true,
            Text = text,
            FontSize = 10,
            Margin = new Thickness(0),
            Foreground = Brushes.Black,
            TextWrapping = TextWrapping.Wrap,
            TextAlignment = TextAlignment.Center,
            VerticalAlignment = VerticalAlignment.Center,
            HorizontalAlignment = HorizontalAlignment.Center,
            VerticalContentAlignment = VerticalAlignment.Center,
            Background = Brushes.Transparent,
            BorderThickness = new Thickness(0),
            Name = "tb_shape",
            IsEnabled = true,

        };

        grid.Children.Add(textblock);

...

public class CircleTool : Tool
{
    public CircleTool() : base(0, new Ellipse()
    {
        Width = 35,
        Height = 35,
    }, "Kreis", "_circle")
    {
        //nothing / empty
    }

...

                    Tool el = (Tool)element;
                    var b = el.grid. <-- i wanna talk to my childs here

Я могу говорить только с моей сеткой, потому что этосоздано в xaml в wpf.Поэтому я могу изменить FieldModifier на public, но не на мои Shapes & Textbox.

<UserControl x:Class="UML_Softwaremodellierung.Tool"
         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:UML_Softwaremodellierung"
         mc:Ignorable="d" 
         d:DesignHeight="60" d:DesignWidth="60"
         AllowDrop="true"
         >
<Grid x:Name="grid" x:FieldModifier="public"/>
</UserControl> 

1 Ответ

0 голосов
/ 08 октября 2018

Не уверен, почему вы создаете его в коде позади, однако просто сделайте TextBox общедоступным членом класса Tool, например, общедоступным свойством только для чтения:

public partial abstract class Tool : UserControl
{
    public TextBox TextBox { get; }

    public Tool(...)
    {
        ...
        TextBox = new TextBox
        {
           ...
        };

        grid.Children.Add(TextBox);
    }
}

Затем получите к нему доступ следующим образом:

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