2010-03-18 32 views
6

Tôi là người mới bắt đầu sử dụng Silverlight vì vậy tôi hy vọng tôi có thể nhận được câu trả lời mang lại cho tôi nhiều ánh sáng hơn trong quá trình đo bạc.Cách đo canvas có chiều cao và chiều rộng tự động

Tôi đã tìm thấy một điều khiển ngăn nắp liên tiếp từ silverlight slide control và bây giờ tôi cố gắng sử dụng nó trong dự án của mình. Vì vậy, các slide ra là làm việc thích hợp, tôi phải đặt điều khiển người dùng trên một khung. Điều khiển người dùng sau đó sử dụng cho chính nó chiều cao của nội dung của nó. Tôi chỉ muốn thay đổi hành vi đó để chiều cao được đặt thành không gian có sẵn từ canvas gốc.

Bạn thấy uxBorder nơi chiều cao được đặt. Làm thế nào tôi có thể đo chiều cao thực tế và đặt nó vào biên giới?

Tôi đã thử nó với Height={Binding ElementName=notificationCanvas, Path=ActualHeight} nhưng thuộc tính phụ thuộc này không có gọi lại, do đó, actualHeight không bao giờ được đặt.

Những gì tôi muốn đạt được là một usercontrol như tweetboard mỗi ví dụ trên Jesse Liberty's blog

Xin lỗi vì viết tiếng Anh của tôi, tôi hy vọng bạn hiểu câu hỏi của tôi.

<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> 

Trả lời

1

Hey - một vài điều:

  • Tôi đoán nó chỉ là một lỗi đánh máy, nhưng: "{Binding ElementName = MainBorder, Path = Chiều cao}" nên được " {Binding ElementName = uxBorder, Path = Chiều cao}"(hoặc ActualHeight)
  • Các SlideEffect xuất hiện để thiết lập một hình học clip, đó là sẽ ảnh hưởng như thế nào "lớn" có vẻ

    RectangleGeometry clipRect = new RectangleGeometry();

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

    host.Clip = clipRect;

Nếu bạn nhận xét ra các dòng trên từ sự kiểm soát trượt, bạn sẽ thấy một sự thay đổi đáng chú ý trong lớn như thế nào bảng trông.

1

Tôi nghĩ rằng các thuộc tính ActualWidth hoặc ActualHeight không thể đặt ở chế độ chỉ có thể đặt.

Đối với điều đó bạn sẽ không thể sử dụng ràng buộc, có thể nếu bạn tạo phần tử sau khi trang đã được tải, vì Kích thước thực tế Canvas vào thời điểm tạo sẽ không được biết. Tại sao bạn không thử tạo thuộc tính cho điều này, với hai cách ràng buộc, và ký sự kiện Canvas trên layoutCập nhật và cập nhật giá trị của thuộc tính, do đó cập nhật tất cả các đối tượng phụ thuộc.
Tôi không biết sự kiện này có đúng hay không bằng cách kiểm tra xem sự kiện có giúp ích cho bạn hay không.

Các vấn đề liên quan