/ / WP7 UserControl relative Höhe - Wpf, Windows-Telefon-7

WP7 usercontrol relative Höhe - wpf, Windows-Phone-7

Ich habe ein Raster mit mehreren Reihen. Ich habe ein Benutzersteuerelement, das ich in einer der Zeilen platziere, mit einem Zeilenbereich von 2. Alle Zeilen haben dieselbe Höhe. Ich setze die vertikale Ausrichtung des Benutzersteuerelements auf Mitte, sodass es in der Mitte der zwei Zeilen angezeigt wird. Was ich möchte, ist, dass das Benutzersteuerelement eine Höhe von 1 der Zeilen des Gitters hat, unabhängig von der Höhe des Gitters. In der Tat wird das Benutzersteuerelement relativ zur Höhe der Zeile im Raster an Höhe zunehmen, da die Zeilenhöhe auch relativ zur Rasterhöhe ist.

Antworten:

1 für die Antwort № 1

Es scheint, als möchten Sie die Höhe des Benutzersteuerelements an die Höhe der RowDefinition binden. Diese Frage ist etwas ähnlich, aber er bindet die Zeilenhöhe und nicht ein enthaltenes Element: Wie kann ich eine ColumnDefinition-Breite oder eine RowDefinition-Höhe erstellen

Ich habe einen einfachen Ansatz ausprobiert, der vielleicht missbilligt wird, aber Ihren Bedürfnissen entspricht.

<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>

<Rectangle x:Name="measurementRect" VerticalAlignment="Stretch" Grid.Row="1" Fill="Blue" Width="1" Visibility="Hidden" />
<Rectangle Grid.Row="2" Grid.RowSpan="2"
VerticalAlignment="Center" Fill="Green" Height="{Binding ElementName=measurementRect,Path=ActualHeight}" Width="200" />
</Grid>
</Page>

0 für die Antwort № 2

Ich dachte zuerst an das Datenbinden der Höhe IhresBenutzersteuerelement auf die Höhe der Zeile durch eine allgemeine Eigenschaft funktioniert möglicherweise, jedoch kam es mir vor, dass Sie die Höhe einer Zeile nicht als RowDefinition-Unterklassen DependencyObject binden können, aber die SetBinding-Methode ist in FrameworkElement definiert.

Das heißt, eine Möglichkeit kann sein, die Höhe der Zeile programmatisch zu ermitteln und die Kontrollhöhe daran zu binden.

Beispieleigenschaft

private int controlHeight;
public int ControlHeight
{
get
{
int row = Grid.GetRow(this.myControl);
return myGrid.RowDefinitions[row].Height;
}
set
{
controlHeight = value;
//Implement property changed event etc here if needed
}
}

Wenn Sie sicherstellen möchten, dass die Steuergröße passtdynamisch skalieren (anders als beim Laden), zusätzlicher Code ist erforderlich, um die Eigenschaft zu aktualisieren und die Benutzeroberfläche zu benachrichtigen. Sie können auch die Höhe des Gitters überprüfen und nach der Anzahl der Spalten in dieser Eigenschaft teilen, obwohl dies möglicherweise nicht so skalierbar ist.

Beachten Sie, dass Sie die Zeilenhöhe durch 2 teilen müssen, da Sie colSpan verwenden.