/ / WP7 usercontrol względna wysokość - wpf, windows-phone-7

WP7 usercontrol względna wysokość - wpf, windows-phone-7

Mam siatkę z kilkoma rzędami. Mam kontrolę użytkownika, którą umieszczam w jednym z wierszy, o rozpiętości wierszy równej 2. Wszystkie wiersze mają taką samą wysokość. Ustawiłem pionowe wyrównanie kontrolki użytkownika na środek, więc pojawia się w środku dwóch rzędów. Chcę, aby kontrola użytkownika miała wysokość 1 wiersza siatki, niezależnie od wysokości siatki. W efekcie kontrola użytkownika wzrośnie na wysokość względem wysokości rzędu w siatce, ponieważ wysokość rzędu jest również względna względem wysokości siatki.

Odpowiedzi:

1 dla odpowiedzi № 1

Wygląda na to, że możesz chcieć danych powiązać wysokość kontroli użytkownika do wysokości RowDefinition. To pytanie jest nieco podobne, ale wiąże wysokość wiersza, a nie zamknięty element: Jak utworzyć bazę danych dla szerokości kolumny ColumnDefinition lub wysokości Row ?efinition?

Próbowałem prostego podejścia, które może być mile widziane, ale może odpowiadać twoim potrzebom.

<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 dla odpowiedzi nr 2

Po raz pierwszy pomyślałem, jak określić wysokość twojegokontrola użytkownika do wysokości wiersza za pośrednictwem wspólnej właściwości może działać, jednak okazało się, że nie można powiązać wysokości wiersza jako podklas klasy RowDefinition DependencyObject, ale metoda SetBinding jest zdefiniowana w FrameworkElement.

Powiedział, że jedną z opcji może być programowe znalezienie wysokości rzędu i powiązanie z nią wysokości kontrolnej.

Właściwość przykładowa

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
}
}

Jeśli chcesz mieć pewność, że rozmiar kontrolny będzieskalować dynamicznie (inaczej niż przy obciążeniu), potrzebny będzie dodatkowy kod, aby zaktualizować właściwość i powiadomić interfejs użytkownika. Można również sprawdzić wysokość siatki i podzielić ją przez liczbę kolumn w tej właściwości, chociaż może ona nie być tak skalowalna.

Uwaga, ponieważ używasz colSpan, możesz potrzebować podzielić wysokość wiersza o 2.