هل يمكنك العرض باستخدام VisualBrush الذي يحتوي على إزاحة؟

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

سؤال

لدي صورة مقاس 64 × 64 أستخدمها كمصدر لـ VisaulBrush والتي أقوم بتجانبها على خلفية عنصر التحكم.ومع ذلك، استنادًا إلى بعض منطق وقت التشغيل، أريد تغيير أصل الفرشاة المرئية.ليس حجم البلاط، فقط حيث يوجد "أعلى اليسار" إذا صح التعبير.بمعنى آخر، لا تعتبر الأمر بمثابة إزاحة في التجانب نفسه، بل بمثابة إزاحة في مكان بدء التبليط في عنصر التحكم.

ومع ذلك، بصرف النظر عن تزييفها باستخدام الصورة الأصلية لعرضها يدويًا في صورة ثانية بنفس الحجم باستخدام نمط 2x2 يبدأ بإزاحة سلبية محددة (وبالتالي قص تلك الصورة 2x2 إلى حجم المربع)، ثم استخدام تلك الصورة كمصدر لفرشاة البلاط الفعلية، لست متأكدًا من كيفية تحقيق ذلك.أنا مندهش لأنني لم أر أي نوع من TileOffset أو شيء مشابه.قد ينتهي الأمر بتدوير فئتي الفرعية من الفرشاة التي تفعل ذلك بالضبط.

ما لم يعرف شخص آخر طريقة أسهل للقيام بذلك ...:)

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

المحلول

كذلك كما تنص هنا خاصية إطار عرض TileBrushs:

الحصول على أو تعيين موضع وأبعاد البلاط الأساسي لـ TileBrush

يمكنك بسهولة ضبط المعلمتين الأوليين لـ ViewPort لتعويض التجانب.على سبيل المثال:

<ImageBrush ImageSource="..."
  Viewport="0,0,20,20" ViewportUnits="Absolute"
  TileMode="Tile" />

إذا كانت هذه هي قاعدتك وتريد إزاحة 5 بكسل في اتجاه x، فافعل:

<ImageBrush ImageSource="..."
  Viewport="5,0,20,20" ViewportUnits="Absolute"
  TileMode="Tile" />

مثل TileBrush هو قاعدة ل ImageBrush تماما كما ل VisualBrush وهذا ينطبق بالتساوي على VisualBrush.

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