テキストブロックの絶対位置を取得しようとしていますが、代わりに要素の相対位置を取得するだけです。
ここに私のXAMLコードがあります:
<Grid Style="{StaticResource LayoutRootStyle}" x:Name="grid_wrapper">
<Grid.Background>
<ImageBrush ImageSource="Assets/background_menu.png" />
</Grid.Background>
<Grid x:Name="grid_main">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="430" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" x:Name="Sidebar">
<Grid.Background>
<SolidColorBrush Color="#000000" Opacity="0.5" />
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" x:Name="grid_mainCaption">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Style="{StaticResource BackButtonStyleMain}" TabIndex="2" Margin="40,50,0,0" VerticalAlignment="Center" x:Name="backButton" Click="GoBack" IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}"/>
<TextBlock x:Uid="Statistics" Margin="120,0,0,0" Text="Statistics" VerticalAlignment="Bottom" FontSize="33" Foreground="Gold" FontFamily="Assets/sui generis rg.ttf#Sui Generis"/>
</Grid>
<Grid x:Name="grid_captions" Grid.Row="1" Grid.Column="0" Margin="120,0,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" /> <!-- Spielstand zurücksetzen -->
</Grid.RowDefinitions>
<TextBlock Text="Spielstatistik" Grid.Row="0" FontSize="22" Foreground="Gold" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,70,0,70"/>
<TextBlock Text="Insgesamte Spielzeit" Grid.Row="1" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis"/>
<TextBlock Text="Dauer des letzten Spiels" Grid.Row="2" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Dauer des längsten Spiels" Grid.Row="3" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Dauer des kürzesten Spiels" Grid.Row="4" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Anzahl der gewonnenen Spiele" Grid.Row="5" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Anzahl der gewonnenen Turniere" Grid.Row="6" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Anzahl der verlorenen Spiele" Grid.Row="7" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<!-- I want to have the Y-Position of this element -->
<TextBlock x:Name="Spielstatistik" Text="Anzahl der verlorenen Turniere" Grid.Row="8" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Würfelstatistik" Grid.Row="9" FontSize="22" Foreground="Gold" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,70,0,70"/>
<TextBlock Text="Anzahl der Würfe" Grid.Row="10" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Anzahl der Pip" Grid.Row="11" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Pip pro Wurf" Grid.Row="12" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Eröffnungen gewonnen" Grid.Row="13" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Anzahl Päsche" Grid.Row="14" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Zwei Päsche hintereinander" Grid.Row="15" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Drei Päsche hintereinander" Grid.Row="16" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Vier Päsche hintereinander" Grid.Row="17" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
<TextBlock Text="Fünf Päsche hintereinander" Grid.Row="18" FontSize="16" FontFamily="Assets/sui generis rg.ttf#Sui Generis" Margin="0,20,0,0"/>
</Grid>
</Grid>
</Grid>
「Spielstatistik」という名前のテキストブロックの絶対Y位置が必要です。私はすでに次のようなことを試しました:
float StatisticsNew::GetYPositionFromElement(UIElement^ obj)
{
auto transform = obj->TransformToVisual(nullptr);
auto point = transform->TransformPoint(Point(0,0));
return point.Y;
}
int YPosition = (int)GetYPositionFromElement(this->Spielstatistik);
YPosition の値は 20 です。ただし、20 は前の要素に対する相対位置にすぎません (margin-top が 20 に設定されているため)。
要素の絶対位置を取得するにはどうすればよいですか?