2010-03-18 114 views
6

我是silverlight的初學者,所以我希望我能得到一個答案,讓我在Silverlight的度量過程中獲得更多的亮點。如何測量具有自動高度和寬度的畫布

我發現從silverlight slide control interessting翻出控制,現在我嘗試在我的項目中使用它。爲了使滑出功能正常工作,我必須將用戶控件放置在畫布上。用戶控件然後使用其內容的高度。我只是想改變這種行爲,以便將高度設置爲父畫布的可用空間。

您會看到設置高度的uxBorder。我如何測量實際高度並將其設置到邊界?

我試過Height={Binding ElementName=notificationCanvas, Path=ActualHeight},但這個依賴屬性沒有回調,所以actualHeight從不設置。

我想實現的是對Jesse Liberty's blog

對不起,我的英語寫作就像每例如tweetboard一個用戶控件,我希望你明白我的問題。

<Canvas x:Name="notificationCanvas" Background="Red"> 
      <SlideEffectEx:SimpleSlideControl GripWidth="20" GripTitle="Task" GripHeight="100"> 
       <Border x:Name="uxBorder" 
        BorderThickness="2" 
        CornerRadius="5" 
        BorderBrush="DarkGray" 
        Background="DarkGray" 
        Padding="5" Width="300" 
        Height="700" 
        > 
        <StackPanel> 
         <TextBlock Text="Tasks"></TextBlock> 
         <Button x:Name="btn1" Margin="5" Content="{Binding ElementName=MainBorder, Path=Height}"></Button> 
         <Button x:Name="btn2" Margin="5" Content="Second Button"></Button> 
         <Button x:Name="btn3" Margin="5" Content="Third Button"></Button> 
         <Button x:Name="btn1_Copy" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy1" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy2" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy3" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy4" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy5" Margin="5" Content="First Button"/> 
         <Button x:Name="btn1_Copy6" Margin="5" Content="First Button"/> 
        </StackPanel> 
       </Border> 
      </SlideEffectEx:SimpleSlideControl> 

回答

1

嘿 - 一對夫婦的事情:

  • 我猜它只是一個錯字,但: 「{綁定的ElementName = MainBorder,路徑=身高}」 應爲「 {綁定的ElementName = uxBorder,路徑=身高}」(或的ActualHeight)
  • 的SlideEffect似乎設置剪輯的幾何形狀,這是會影響到如何做‘大’看起來

    RectangleGeometry clipRect = new RectangleGeometry();

    clipRect.Rect = new Rect(0, 0, panel.ActualWidth, host.Height);

    host.Clip = clipRect;

如果您註釋掉滑閥控制裝置上面的紋路,你應該看到在面板有多大看起來明顯的變化。

1

我認爲ActualWidth或ActualHeight屬性不能只設置gettable。

爲此,您將無法使用綁定,也許如果您在頁面加載後創建元素,因爲創建時的畫布實際尺寸將是未知的。

爲什麼不嘗試使用雙向綁定爲此創建一個屬性,並在layoutUpdated上簽名Canvas事件並更新該屬性的值,從而更新所有相關對象。
我不知道這個事件是否正確,通過檢查它是否對你有幫助。