2010-05-23 92 views
1

我試圖綁定一個Viewbox到是動態創建的,像這樣一個Canvas綁定視框到畫布

 <ListBox.ItemTemplate> 
      <DataTemplate> 
       <DockPanel> 
        <Viewbox> 
         <ContentPresenter Content="{Binding Canvas}"/> 
        </Viewbox> 
       </DockPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 

這隻要正常工作的Canvas沒有任何孩子,但儘快在Canvas有孩子,它沒有顯示。我在這裏錯過了什麼?

回答

2

你怎麼知道它的工作原理? A Canvas只是一個Panel,寬度/高度爲零。即使它有任何孩子,它的尺寸仍然是0,0。您必須明確地將WidthHeight設置爲非零值才能顯示。將以下代碼段粘貼到XamlPad或者只是在自己的應用程序中測試。現在,刪除WidthHeight,它將消失。

<Viewbox> 
    <ContentPresenter> 
     <ContentPresenter.Content> 
     <Canvas Background="Red" Width="1" Height="1"> 
      <TextBlock Canvas.Left="10" Canvas.Top="20" Text="123" /> 
     </Canvas> 
     </ContentPresenter.Content> 
    </ContentPresenter> 
</Viewbox> 
0

忘記我曾問過:-)

創建畫布的孩子,當我出現異常,而這反過來又導致畫布不會顯示。我很傷心地說,這不是我第一次犯這樣的錯誤,而且它可能不是最後一次或者:

TextBlock tb = new TextBlock(); 
tb.SetValue(Canvas.LeftProperty, 5); 
tb.SetValue(Canvas.TopProperty, 5); 

「5」是不是「左」或「頂」的有效值。它當然應該是

TextBlock tb = new TextBlock(); 
tb.SetValue(Canvas.LeftProperty, 5.0); 
tb.SetValue(Canvas.TopProperty, 5.0); 

而且因爲它是作爲數據綁定的一部分創建的,所以沒有顯示異常對話框。總之...... DOOOOH :-) :-)