2012-04-19 1 views
0

я получил этот кусок кода:Почему TextBlock не отображается с атрибутом Projection в холсте?

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <Canvas> 
     <TextBlock Name="txtblk" 
        Canvas.Left="100" Canvas.Top="100" 
        Text="ROTATE"> 
     </TextBlock> 
    </Canvas> 
</Grid> 

Он хорошо работает, и я могу видеть мою TextBlock. Но если я добавлю к нему атрибут «Проекция»:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <Canvas> 
     <TextBlock Name="txtblk" 
        Canvas.Left="100" Canvas.Top="100" 
        Text="ROTATE"> 
      <TextBlock.Projection> 
       <PlaneProjection x:Name="planeProjection" 
           CenterOfRotationX="0.5" CenterOfRotationY="0.5" 
           RotationZ="45"/> 
      </TextBlock.Projection> 
     </TextBlock> 
    </Canvas> 
</Grid> 

TextBlock просто исчез! На странице нет другого элемента управления.

Может ли кто-нибудь сказать мне, что случилось? Я действительно застрял.

Спасибо!

P.S. Полный XAML, как показано ниже:

<phone:PhoneApplicationPage 
x:Class="WP7Test.MainPage" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" 
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" d:DesignWidth="728" d:DesignHeight="480" 
FontFamily="{StaticResource PhoneFontFamilyNormal}" 
FontSize="{StaticResource PhoneFontSizeNormal}" 
Foreground="{StaticResource PhoneForegroundBrush}" 
SupportedOrientations="Landscape" Orientation="Landscape" 
shell:SystemTray.IsVisible="False"> 

    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
      <Canvas> 
       <TextBlock Name="txtblk" 
          Canvas.Left="100" Canvas.Top="100" 
          Text="ROTATE"> 
        <TextBlock.Projection> 
         <PlaneProjection x:Name="planeProjection" 
             CenterOfRotationX="0.5" 
             CenterOfRotationY="0.5" 
             RotationZ="45"/> 
        </TextBlock.Projection> 
       </TextBlock> 
      </Canvas> 
     </Grid> 
    </Grid> 
</phone:PhoneApplicationPage> 
+0

Вы можете разместить больше XAML? – Robaticus

ответ

0

Если я бегу Silverlight пример того же, , эффект корректно работает в Silverlight. Если я скопирую и вставлю XAML из этого проекта в проект телефона, проекция будет правильно отображаться на телефоне. Если я вставляю свой код в Silverlight, он отлично работает в Silverlight. Если я обрезаю нечетную вложенную сетку из вашего кода, она по-прежнему работает в Silverlight, но продолжает сбой по телефону. Если я удалю элемент Canvas с телефона версии и, удалите Canvas.Top и Canvas.Left прилагаемые свойства, после чего он работает по телефону.

Основываясь на этих экспериментах, я думаю, что это похоже на ошибку, и если это не ошибка, то в любом месте, где я могу найти, нет упоминания об ограничении.

Простым решением является применение Projection к StackPanel, Viewbox или аналогичный контейнер UIElement.

Вот пример:

<Grid x:Name="LayoutRoot" Background="Transparent" ShowGridLines="True"> 
    <Canvas Background="Purple"> 
     <Viewbox Canvas.Left="100" Canvas.Top="100" > 
      <Viewbox.Projection> 
       <PlaneProjection x:Name="planeProjection" CenterOfRotationX="0.5" CenterOfRotationY="0.5" RotationZ="45"/> 
      </Viewbox.Projection> 
      <TextBlock Name="txtblk" Text="ROTATE" FontSize="288"/> 
     </Viewbox> 
    </Canvas> 
</Grid> 
+0

Спасибо за ответ. Я обнаружил, что он хорошо работает с контейнером, таким как Border, но все еще удивляется, почему один TextBlock терпит неудачу ... – cotaku39