So binden Sie Kinderdaten an das übergeordnete Element in WPF .xaml-VorlageC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 So binden Sie Kinderdaten an das übergeordnete Element in WPF .xaml-Vorlage

Post by Anonymous »

Ich habe vor kurzem einen neuen Job bekommen und die Aufgaben sind tiefer in WPF als mein aktuelles Fachwissen.
Die Anwendung enthält verschiedene Vorlagen für Kontrollkästchen. Sie enthalten mehrere Kinderstufen und ich muss auf die Werte eines bestimmten zugreifen.

Code: Select all





































Grid.Column="1" Grid.ColumnSpan="5"
Grid.Row="2" Grid.RowSpan="5"
Data="M31,5 L19.5,5 19.5,19.5 34.5,19.5 34.5,11.75"
Stretch="Fill"
Stroke="White"/>












































Ich brauche den Wert der Größe, die die Innerborder nach dem richtigen Wert einen Zwiebeln hat, aber ich habe keine Ahnung, wie ich diesen Wert erhalten kann . Für andere Objekte in diesem Zusammenhang konnte ich die Informationen finden, die ich über die Eltern-Kind-Beziehungen im Code benötigte. Dies ist die Klasse für den Zwiebschen, den ich versuche, in das Element zu passen: < /p>

Code: Select all

public class RectangleAdorner : Adorner
{
public RectangleAdorner(UIElement adornedElement, bool isRequired, int? widthOffset, int? heightOffset) : base(adornedElement)
{
IsHitTestVisible = false;
IsRequired = isRequired;
HeightOffset =  heightOffset.HasValue ? heightOffset.Value : 0;
WidthOffset = widthOffset.HasValue ? widthOffset.Value : 0;
}

public bool IsRequired { get; set; }
public int HeightOffset { get; set; }
public int WidthOffset { get; set; }

protected override void OnRender(DrawingContext drawingContext)
{
double actualWidth = this.AdornedElement.RenderSize.Width - WidthOffset;
double actualHeight = this.AdornedElement.RenderSize.Height - HeightOffset;
Rect adornedElementRect = new Rect(0, 0, actualHeight, actualWidth);

SolidColorBrush renderBrush = new SolidColorBrush(Colors.Green);
renderBrush.Opacity = 0.3;

double render_thickness = 2.0;
Pen renderPen = IsRequired ? new Pen(new SolidColorBrush(Colors.Red), render_thickness)
: new Pen(new SolidColorBrush(Colors.Green), render_thickness);

drawingContext.DrawRectangle(renderBrush, renderPen, adornedElementRect);
}
}
TL/DR:
Was muss ich mit dieser .xaml -Datei tun, die ich Frameworkelement nennen kann CheckBoxElement.innerPath.Heigth < /code> oder ähnlich in meiner .cs-Datei? < /p>
Ich habe versucht Fühle, dass die ControlTemplate.triggers hilfreich sein mag, aber bisher verstehe ich nichts über sie. Br /> Bearbeiten 2:
Nach mehr Versuchen fand ich den VisualTreehelper < /code>. Damit konnte ich das tun: < /p>
if (frameworkElement is CheckBox box)
{
var bulletDecorator = (BulletDecorator) VisualTreeHelper.GetChild(box, 0);
var bullet = (Grid)bulletDecorator.Bullet;
var innerBorder = bullet.Children.OfType().SingleOrDefault(x => x.Name == "InnerBorder");
if (innerBorder is not null)
{
adornableElement = innerBorder;
}
}
< /code>
Dies fühlt sich jedoch sehr statisch an und erfordert Kenntnis der Vorlage und wird auch brechen, wenn die Vorlage geändert wird. Gibt es eine Möglichkeit, dies eleganter zu lösen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post