कैनवस बदलें। संपत्ति को कोड में पीछे छोड़ दें?


98

मेरे 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;
}

क्या किसी को पता है कि यह करने के लिए वाक्यविन्यास क्या है?

जवाबों:


165
Canvas.SetLeft(theObject, 50)


+1, गॉट लव टाइप सेफ्टी। मैं उत्सुक हूँ कि क्यों सेटलफ़ ने डिपेंडेंसी के बजाय एक UIElement लिया है
जारेडपर

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

msdn.microsoft.com/en-us/library/… Canvas.Left एक संलग्न संपत्ति है, जो XAML उपयोग का समर्थन करती है। इस गुण को कोड में सेट करते समय, इसके बजाय सेटलाइट का उपयोग करें।
यूरी शकटुला

50

इसे इस्तेमाल करे

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

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

  • मूल्य ते करना
  • getValue
  • ClearValue

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


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

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

12

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

theObject.SetValue(Canvas.LeftProperty, 50d);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.