Silverlight Ristiversource of templatedparent ملزمة داخل datatemplate ، هل هو ممكن؟

StackOverflow https://stackoverflow.com/questions/2759613

سؤال

أحاول صنع رسم بياني شريطي UserControl. أقوم بإنشاء كل شريط باستخدام أ DataTemplate.

تكمن المشكلة في حساب ارتفاع كل شريط ، أحتاج أولاً إلى معرفة ارتفاع الحاوية ( TemplatedParent). للأسف ما لدي:

Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height,  Converter={StaticResource HeightConverter}, Mode=OneWay}" 

لا يعمل. في كل مرة قيمة NaN تم إرجاعه إلى المحول الخاص بي. يفعل RelativeSource={RelativeSource TemplatedParent} لا تعمل في هذا السياق؟ ما الذي يمكنني فعله للسماح لـ Datatemplate "بالتحدث" إلى العنصر الذي يتم تطبيقه عليه؟

في حالة يساعد هنا هو Datatemplate Barebones:

<DataTemplate x:Key="BarGraphTemplate">
    <Grid Width="30">
        <Rectangle HorizontalAlignment="Center" Stroke="Black" Width="20" Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height,  Converter={StaticResource HeightConverter}, Mode=OneWay}" VerticalAlignment="Bottom" />
    </Grid>
</DataTemplate>
هل كانت مفيدة؟

المحلول

للإجابة على سؤالك ، يعمل أقارب Sournistors فقط في ControlTemplate لا يعمل في DataTemplate.

هل هناك سبب يجعل مخطط أدوات Silverlight لا تعمل عناصر التحكم من أجلك في إنشاء رسم بياني شريط (أو مخطط عمود حيث يشير takeit إلى مجموعة من القضبان العمودية).

نصائح أخرى

هل جربت خاصية HealHeight؟ يجب أن يعيد لك قيمة. مقرون مع وضع templatedparent إرادة اعمل في قالب البيانات ، لكنه سيعيد مقدم محتوى التحكم/العنصر المحتوى ، وليس عنصر التحكم/العنصر نفسه (وهو ما يفعله عند استخدامه في قالب التحكم). للتجربة ، ضع زرًا في قالب البيانات ، وقم بتعيين تعبير الربط (بدون المسار) إلى خاصية العلامة الخاصة به. تعامل مع حدث النقر ، ووضع نقطة توقف في معالج الأحداث. الآن عندما تقوم بتشغيل المشروع وانقر فوق الزر ، سيتم الضغط على نقطة التوقف في الكود الخاص بك ، ويمكنك رؤية الكائن الذي يرتبط به من خاصية العلامة الخاصة بالزر (والتي يمكنك رؤيتها من معلمة المرسل). أتمنى أن يساعدك هذا...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top