WPF-Form, Rechteck-Bindung
Ich versuche, eine Art von Form in wpf, die nicht die Größe selbst zum Inhalte (der text). Leider ist die stretch-Eigenschaft ist nicht das richtige, da will ich nur die Breite der Form, Größe und ohne die Grenzen (pls kopieren Unterseite Beispiel in xamlpad für sich selbst zu sehen) von dieser Form gestreckt. Die Grenzen sollten so bleiben, wie Sie sind, oder zumindest Skala in Uniform.
Ich habe versucht, viele Ideen. Mit verschiedenen Scheiben die Form in einem grid, stackpanel, oder mit einem abgeschnittenen panel und etc.
Mein Nächster Ansatz wäre der folgende:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Page.Resources>
<LinearGradientBrush StartPoint="0.0,1" EndPoint="0.0,0" x:Key="brushYellow">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.000000" Color="#fffef4a6"/>
<GradientStop Offset="0.175824" Color="#fffef9d6"/>
<GradientStop Offset="0.800000" Color="#fffef9d6"/>
<GradientStop Offset="1.000000" Color="#fffef4a6"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush></Page.Resources><Grid>
<Path Stroke="#fffce90d" StrokeThickness="1" Fill="{StaticResource brushYellow}">
<Path.Data>
<CombinedGeometry GeometryCombineMode="Exclude">
<CombinedGeometry.Geometry1>
<RectangleGeometry RadiusX="15" RadiusY="15">
<!--RectangleGeometry.Rect>
<Binding StringFormat="{}{0 0 {0} 82}" ElementName="Text" Path="Width"/>
</RectangleGeometry.Rect-->
<RectangleGeometry.Rect>
<Rect Width="150" Height="82"/>
</RectangleGeometry.Rect>
</RectangleGeometry>
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<PathGeometry>
<PathGeometry.Figures>
<PathFigureCollection>
<PathFigure IsClosed="True" StartPoint="0,15">
<PathFigure.Segments>
<PathSegmentCollection>
<LineSegment Point="17,41" />
<LineSegment Point="0,67" />
</PathSegmentCollection>
</PathFigure.Segments>
</PathFigure>
</PathFigureCollection>
</PathGeometry.Figures>
</PathGeometry>
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
<TextBox Name="Text" Background="Transparent" BorderThickness="0" MinWidth="150" Margin="0"/>
</Grid></Page>
Dies funktioniert direkt aus der box in xamlpad. Der auskommentierte Teil in Zeile 19 ist, was ich wirklich erreichen will: die Bindung des Rect das Rechteck, um etwas anderes. Leider ist die Breite von Rect ist kein dp, das ist, warum ich bin mit direkt ein stringformatted Bindung an Rect selbst.
Als erwartet mit dem Leben, das nicht funktioniert (sieht man nichts) 😀
Was mache ich hier falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie versuchen, mithilfe einer Transformation ändern Sie die Größe des Rechtecks anstatt die Bindung des Rechtecks Breite direkt. Ich denke, das sollte funktionieren.
E. g. geben Sie etwas wie dies in Ihrer RectangleGeometry tag:
Wo textBoxName ist der name der textbox. Konnte mich nicht dazu bringen, es zu nennen-Text - zu verwirrend.
Geben Sie einen Konverter, um sicherzustellen, dass die Skalierung richtig ist - z.B. Sie werden wahrscheinlich wollen, um etwas von dem zurückgeben, wie Breite /150 Ihre Beispielcode.
Sehe ich auch etwas seltsam Verhalten, wenn das Rechteck die Breite auf Auto gesetzt ist in der Visual Studio-designer - ich denke, das ist wahrscheinlich eine designer Marotte. Sollte funktionieren, sobald der Konverter angeschlossen ist, zur Laufzeit.
Was ist mit Ihrem Pfad als Brush? Im folgenden code verwende ich eine DrawingBrush als Hintergrund für die TextBox selbst oder als Hintergrund für eine umschließende Grenze. Nur ein Tipp...
Hoffe, das hilft.
ich bin, etwas wie das zu tun. ich möchte die benutzerdefinierten Formen, die automatisch re-Größe, wenn ich die Größe des Fensters ändern. für meine Lösung habe ich abgeleitet aus Form und überschreiben die definingGeometry-Eigenschaft.
Für die Dimensionen meiner Form ich die ActualWidth-und ActualHeight-Eigenschaften wie diese spiegeln das wahre Breite und Höhe. ich bin auch overiding die measureOverride () - Methode wie diese
Ich bin die Generierung der Form im code verwenden (wie ich schon sagte) actualWidth und actualHeight als maximale Werte.
hoffe, das hilft