2010-09-17 59 views
2

爲什麼這會拋出一個錯誤,我該如何解決......我需要將裁剪矩形設置爲動態。畫布內Silverlight的動態裁剪寬度

<Grid.ColumnDefinitions> 
     <ColumnDefinition Width="42"/> 
     <ColumnDefinition x:Name="ListBoxContainer" Width="*"/> 
     <ColumnDefinition Width="42"/> 
    </Grid.ColumnDefinitions> 


    <Canvas> 
     <Button x:Name="btnGalleryLeft" 
       Click="btnGalleryLeftClick" 
       Style="{StaticResource GalleryNavigationLeft}" 
       Canvas.Left="7" 
       Canvas.Top="50" /> 
    </Canvas> 
    <Canvas Grid.Column="1" x:Name="ListboxWrapper"> 
     <Canvas.Clip> 
      <RectangleGeometry> 
       <RectangleGeometry.Rect> 
        <Rect X="0" Y="0" 
          Width="{Binding ElementName=ListBoxContainer, Path=Width}" 
          Height="{Binding ElementName=ListBoxContainer, Path=Height}"/> 
       </RectangleGeometry.Rect> 
      </RectangleGeometry> 
     </Canvas.Clip> 
     <ListBox x:Name="ListBox1" 
       Margin="15, 18, 15, 0" 
       Style="{StaticResource GalleryListBoxStyle}" 
       ItemsSource="{Binding DocItemCollection}" 
       SelectionChanged="ListBox_SelectionChanged" 
       MouseLeftButtonUp="ListBox_MouseLeftButtonUp" 
       Canvas.Top="0" 
       Canvas.Left="0" 
       /> 
    </Canvas> 
    <Canvas Grid.Column="2"> 
     <Button x:Name="btnGalleryRight"      
       Click="btnGalleryRightClick" 
       Style="{StaticResource GalleryNavigationRight}" 
       Margin="0, 0, 7, 0" 
       Canvas.Top="50" />   
+0

最新錯誤? – Mark 2010-09-17 06:07:58

+0

該錯誤是一個xamlparseexception錯誤,稱System.Windows.Rect.X是隻讀屬性,無法設置。我該如何設置它...? – bcm 2010-09-17 06:24:08

回答

1

解決方案終於....在很多cursin和發誓後。如果只有一切都像在CSS(溢出血腥隱藏屬性)一樣嚴格。

前端:

<Canvas Grid.Column="1" x:Name="ListboxWrapper" Background="Black"> 
      <ScrollViewer Background="Red" 
          FlowDirection="LeftToRight" 
          HorizontalScrollBarVisibility="Hidden" 
          VerticalScrollBarVisibility="Hidden" 
          x:Name="ScrollViewerClipper">     
       <Canvas x:Name="CarouselContainer"> 
        <gallery:ImageCarousel x:Name="carousel" /> 
       </Canvas> 
      </ScrollViewer> 

後端:

public GalleryPanel() 
     { 
      InitializeComponent(); 

      LayoutRoot.SizeChanged +=new SizeChangedEventHandler(LayoutRoot_SizeChanged); 
     } 

     private void LayoutRoot_SizeChanged(object s, SizeChangedEventArgs e) 
     { 
      ScrollViewerClipper.Width = ListboxWrapper.ActualWidth; 
      ScrollViewerClipper.Height = ListboxWrapper.ActualHeight; 
     } 
+0

(使用scrollviewer作爲剪輯而不是剪輯矩形) – bcm 2010-09-17 07:09:41

0

我認爲你已經過於複雜了。綁定到ColumnDefinition的寬度/高度不起作用。我只是簡單地創建可以訂閱SizeChanged事件並基於ActualWidth [Height]設置剪輯的行爲。

+0

我對銀光很陌生..現在我該怎麼做?我是否仍然通過SizeChange事件設置剪裁矩形的寬度和高度? – bcm 2010-09-17 06:38:38

2

,您仍然可以使用RectangleGeometry作爲裁剪區域。只要訂閱Loaded事件,並在創建一個新的RectangleGeometry

void control_Loaded(object sender, RoutedEventArgs e) 
     { 
      LayoutRoot.DataContext = this; 

      Rect rect = new Rect(0, 0, yourWidth, yourHeight); 
      RectangleGeometry reo = new RectangleGeometry(); 
      reo.Rect = rect; 
      this.canvas.Clip = reo; 
     } 

我想補充的信息很少

此外,不透明度和剪輯屬性設置由 組成線程處理。但是,如果在動畫對象上使用了不透明蒙版或非矩形剪輯,則這些操作將通過 傳遞給UI線程。這意味着即使剪輯區域是一個 矩形形狀,但使用PathGeometry,操作將被傳遞到UI線程的 。因此,如果可能的話,確保始終使用RectangleGeometry來剪切路徑。

+0

謝謝,它工作。 – 2013-12-25 21:04:07