2012-04-19 50 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 2012-04-19 18:58:06

回答

0

如果我跑同樣的事情,一個Silverlight例如,影響正常工作在Silverlight。如果我將該項目中的XAML複製並粘貼到電話項目中,則投影會在手機上正確呈現。如果我將代碼粘貼到Silverlight中,它可以在Silverlight中正常工作。如果我從代碼中修剪奇怪的嵌套網格,它仍然可以在Silverlight中工作,但在手機上仍會失敗。如果我從電話版本中刪除Canvas元素,請刪除Canvas.TopCanvas.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 2012-04-20 05:05:29

相關問題