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"/>
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);
}
}
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?
Mobile version