سؤال

لدي صورة يمكن للمستخدم التكبير / التمرير. أرغب في رسم بعض المستطيلات / الدوائر على طبقة مختلفة (على سبيل المثال: رسم دائرة لموجه كل شخص تم تحديده في الصورة).

موقف المستطيل نسبة إلى الصورة.

كيف أقوم بإنشاء مثل هذا التراكب؟

هل كانت مفيدة؟

المحلول

لقد تمكنت من القيام بشيء مماثل:

  • تعيين صورة كخلفية
  • وضع شفافة ItemsControl فوقها
  • تعيين ItemsControl.ItemsPanel ل Canvas
  • كتب معالجات لسحب العمليات

مقتطف الكود:

  <ItemsControl x:Name="overlayItemsControl" 
        Background="Transparent"  
        ItemsSource="{Binding Path=Blocks}"
        Width="{Binding ElementName=imageControl, Path=Width}"
        Height="{Binding ElementName=imageControl, Path=Height}"
        ItemContainerStyle="{StaticResource rectStyle}"
        PreviewMouseMove="ItemsControl_PreviewMouseMove"
        PreviewMouseDown="ItemsControl_PreviewMouseDown"
        PreviewMouseUp="ItemsControl_PreviewMouseUp"
        PreviewKeyDown="ItemsControl_PreviewKeyDown">

        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas IsItemsHost="True" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
   ....
</ItemsControl>

نصائح أخرى

طريقة سهلة هي مجرد استخدام قماش وقم بتعيين خاصية خلفية CANVAS في صورتك، ثم ضع دوائرك أو مستطيلاتك على رأس ذلك ووضعها مع خصائص Canvas.left و .top.

    <Canvas x:Name="myCanvas">
        <Canvas.Background>
            <ImageBrush ImageSource="c:\photo.bmp"/>
        </Canvas.Background>
        <Image Canvas.Top="20" Canvas.Left="20" Height="20" Width="20" Source="c:\circle.bmp"/>
    </Canvas>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top