Czy zmienić właściwość Canvas.Left w kodzie?


98

Mam prostokąt w moim XAML i chcę zmienić jego Canvas.Leftwłaściwość w kodzie za:

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

Ale to nie działa:

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

Czy ktoś wie, jaka jest składnia, aby to zrobić?

Odpowiedzi:


165
Canvas.SetLeft(theObject, 50)


+1, muszę kochać bezpieczeństwo typu. Jestem jednak ciekawy, dlaczego SetLeft przyjmuje UIElement zamiast DependencyObject
JaredPar

4
@JaredPar: zgaduję, że skoro SetLeft jest konkretnie metodą Canvas, rozumie, jakie typy miałoby sens nadanie właściwości Left. Uważa to za UIElement, co prawdopodobnie zwiększa wykrywanie błędnego kodu, gdy przypadkowo przekazywana jest do niego niewłaściwa zmienna.
AnthonyWJones

msdn.microsoft.com/en-us/library/… Canvas.Left to dołączona właściwość, która obsługuje użycie języka XAML. Podczas ustawiania tej właściwości w kodzie należy zamiast tego użyć SetLeft.
Yury Schkatula

50

Spróbuj tego

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

Na DependencyObject (podstawa większości klas WPF) znajduje się grupa metod, które umożliwiają wspólny dostęp do wszystkich właściwości zależności. Oni są

  • Ustalić wartość
  • GetValue
  • ClearValue

Edycja Zaktualizowano zestaw, aby używał podwójnego literału, ponieważ typ docelowy jest podwójny.


Dzięki, aby to zadziałało, musiałem rzucić liczbę całkowitą: theObject.SetValue (Canvas.LeftProperty, (double) 50);
Edward Tanguay,

Nie, w tym celu określ stałą numeryczną w podwójnym formacie: heObject.SetValue (Canvas.LeftProperty, 50.0);
Budda

12

Ponieważ zmieniamy właściwość `` obiektu '', lepiej byłoby użyć metody suggedte od JaredPar:

theObject.SetValue(Canvas.LeftProperty, 50d);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.