2009-02-12 17 views
88

मैं अपने XAML में एक आयत है और पीछे कोड में अपनी Canvas.Left संपत्ति बदलना चाहते हैं:मैं कोड में संलग्न संपत्ति को कैसे एक्सेस करूं?

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

लेकिन यह काम नहीं करता:

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

किसी को भी पता है वाक्य रचना करना है क्या इस?

उत्तर

146
Canvas.SetLeft(theObject, 50) 

+0

+1, प्यार प्रकार सुरक्षा होना चाहिए। मैं उत्सुक हूं कि क्यों SetLeft DependencyObject – JaredPar

+3

@JaredPar की बजाय UIElement लेता है: अनुमान में मैं कहूंगा कि चूंकि सेटलेफ्ट विशेष रूप से कैनवास का एक तरीका है, यह समझता है कि यह किस तरह से बाएं संपत्ति को समझने के लिए समझ में आता है। यह यूआईएलमेंट होने के लिए मानता है, यह शायद दोषपूर्ण कोड का पता लगाता है जहां गलती से गलत चर इसे पारित किया जाता है। – AnthonyWJones

+0

https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.canvas.left.xx कैनवास। लिफ्ट एक संलग्न संपत्ति है, जो XAML उपयोग का समर्थन करता है। कोड में इस प्रॉपर्टी को सेट करते समय, इसके बजाय SetLeft का उपयोग करें। –

46

इस

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

प्रयास करें DependencyObject (सबसे WPF वर्गों के आधार), जो सभी निर्भरता गुण के लिए आम उपयोग की अनुमति पर तरीकों का एक समूह है। वे

  • setValue
  • getValue
  • ClearValue

संपादित एक डबल शाब्दिक का उपयोग करने के बाद से लक्ष्य प्रकार एक डबल है सेट अपडेट किया गया है।

+0

धन्यवाद, यह काम करने के लिए मैं ही था प्राप्त करने के लिए पूर्णांक डालें: theObject.SetValue (Canvas.LeftProperty, (डबल) 50); –

+0

नहीं, इसके लिए संख्यात्मक स्थिरांक को डबल प्रारूप में निर्दिष्ट करें: heObject.SetValue (Canvas.LeftProperty, 50.0); – Budda

12

हम 'वस्तु' की संपत्ति को बदल रहे हैं के रूप में, यह JaredPar द्वारा विधि suggedte उपयोग करने के लिए बेहतर होगा:

theObject.SetValue(Canvas.LeftProperty, 50d); 
संबंधित मुद्दे