Могу ли я добавить StretchDirection к VisualBrush?

Можно ли добавить атрибут StretchDirection в VisualBrush? Моя VisualBrush содержит элемент мультимедиа, а элемент мультимедиа имеет этот атрибут, но не VisualBrush. Когда я применяю атрибут StretchDirection к этому элементу MediaElement, он игнорируется. Я предполагаю, потому что VisualBrush переопределяет его атрибуты.

  <VisualBrush x:Key = "vb_zoneOneAdvertisement" TileMode = "None" Stretch = "Uniform" AlignmentX = "Center" AlignmentY = "Center" >
     <VisualBrush.Visual>
        <MediaElement />
     </VisualBrush.Visual>
  </VisualBrush> 

мне кажется немного странным использовать только кисть для рендеринга MediaElement? какова причина и цель этого?

GCamel 28.03.2018 14:34

@GCamel - из соображений производительности. Мне нужно запустить один и тот же медиафайл в нескольких разных окнах, которые, в свою очередь, отображаются на одном или нескольких мониторах. Если я использую другой мультимедийный элемент, для каждой области, в которой я хочу воспроизвести мультимедийный файл, это приводит к потере большого количества ресурсов процессора и памяти. С помощью mediabrush я могу запустить один медиаплеер и разместить контент в любом окне / пространстве, которое захочу, без потери ресурсов.

nikotromus 01.04.2018 19:49

Привет, я пробую свой код - не понимаю, что вы хотите сделать с направлением - Stretch на VisualBrush, кажется, достаточно. Кстати, направление невозможно использовать, потому что контент отображается в окне просмотра в VisualBrush. Вы должны настроить его под свои нужды - Viewbox = "0,0,0.5,0.5" или ViewPort. Удачи.

GCamel 03.04.2018 14:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
3
208
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

VisualBrush берет ВСЕ содержимое VisualBrush.Visual и использует его как Brush. Итак, представьте, что вы используете Stretch = "None" с Image размером 10000x10000, и вы устанавливаете этот VisualBrush как Background вашего Window. Как этот код:

<Window x:Class = "WpfApplication3.MainWindow"
        xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
        Title = "ListViewBasicSample" Height = "500" Width = "500">

    <Grid>
        <Grid.Background>
            <VisualBrush TileMode = "None" AlignmentX = "Center" Stretch = "Fill" AlignmentY = "Center" >
                <VisualBrush.Visual>
                    <Grid Background = "red">
                        <Image Source = "wp2444179.jpg" HorizontalAlignment = "Center" VerticalAlignment = "Center" Stretch = "None" Margin = "100" Height = "10000" />
                    </Grid>
                </VisualBrush.Visual>
            </VisualBrush>
        </Grid.Background>
    </Grid>

</Window>

Можно ожидать, что будет визуализирована только небольшая часть этого изображения, но нет, потому что ВСЕ содержимое VisualBrush.Visual принимается как VisualBrush. Вот результат:

Свойству Stretch в данном случае нет места. Вы можете использовать margin, padding или TileMode, чтобы внести здесь небольшие изменения. Возможно, добавьте Container (например, Grid) для вашего MediaElement и определите Width и Height для этого Container.

tl; dr; Вы спросили, можно ли использовать Stretch в VisualBrush - его можно использовать, и это правильно учитывается, как в вашем примере кода. Проблема с VisualBrush.Visual. Нет (почти) смысла использовать это свойство там, потому что весь отрендеренный VisualBrush.Visual используется как Brush. Я бы сказал, чем больше растягиваешь, тем больше используется кисть :)

Другие вопросы по теме