Thay đổi thuộc tính Canvas.Left trong mã phía sau?


98

Tôi có một hình chữ nhật trong XAML của mình và muốn thay đổi thuộc tính của nó Canvas.Lefttrong mã phía sau:

<UserControl x:Class="Second90.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300" KeyDown="txt_KeyDown">
    <Canvas>
        <Rectangle 
            Name="theObject" 
            Canvas.Top="20" 
            Canvas.Left="20" 
            Width="10" 
            Height="10" 
            Fill="Gray"/>
    </Canvas>
</UserControl>

Nhưng điều này không hoạt động:

private void txt_KeyDown(object sender, KeyEventArgs e)
{
    theObject.Canvas.Left = 50;
}

Có ai biết cú pháp là gì để làm điều này?

Câu trả lời:


165
Canvas.SetLeft(theObject, 50)


+1, phải thích loại an toàn. Tôi tò mò mặc dù tại sao SetLeft lại sử dụng UIElement thay vì DependencyObject
JaredPar

4
@JaredPar: chắc chắn tôi sẽ nói rằng vì SetLeft cụ thể là một phương thức của Canvas nên nó hiểu những loại nó sẽ có ý nghĩa khi cung cấp thuộc tính Left. Nó coi đây là UIElement, điều này có thể làm tăng khả năng phát hiện mã bị lỗi khi vô tình chuyển sai biến cho nó.
AnthonyWJones

msdn.microsoft.com/en-us/library/… Canvas.Left là một thuộc tính đính kèm, hỗ trợ việc sử dụng XAML. Khi đặt thuộc tính này trong mã, hãy sử dụng SetLeft để thay thế.
Yury Schkatula

50

Thử cái này

theObject.SetValue(Canvas.LeftProperty, 50d);

Có một nhóm các phương thức trên DependencyObject (cơ sở của hầu hết các lớp WPF) cho phép truy cập chung vào tất cả các thuộc tính phụ thuộc. họ đang

  • Đặt giá trị
  • GetValue
  • ClearValue

Chỉnh sửa Đã cập nhật tập hợp để sử dụng chữ kép vì kiểu đích là chữ kép.


Cảm ơn, để điều này hoạt động, tôi phải ép kiểu số nguyên: theObject.SetValue (Canvas.LeftProperty, (double) 50);
Edward Tanguay

Không, đối với điều này chỉ định hằng số ở định dạng kép: heObject.SetValue (Canvas.LeftProperty, 50.0);
Budda

12

Vì chúng tôi đang thay đổi thuộc tính của 'đối tượng', tốt hơn là sử dụng phương thức suggest của JaredPar:

theObject.SetValue(Canvas.LeftProperty, 50d);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.