Можно ли добавить атрибут 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>
@GCamel - из соображений производительности. Мне нужно запустить один и тот же медиафайл в нескольких разных окнах, которые, в свою очередь, отображаются на одном или нескольких мониторах. Если я использую другой мультимедийный элемент, для каждой области, в которой я хочу воспроизвести мультимедийный файл, это приводит к потере большого количества ресурсов процессора и памяти. С помощью mediabrush я могу запустить один медиаплеер и разместить контент в любом окне / пространстве, которое захочу, без потери ресурсов.
Привет, я пробую свой код - не понимаю, что вы хотите сделать с направлением - Stretch на VisualBrush, кажется, достаточно. Кстати, направление невозможно использовать, потому что контент отображается в окне просмотра в VisualBrush. Вы должны настроить его под свои нужды - Viewbox = "0,0,0.5,0.5" или ViewPort. Удачи.





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. Я бы сказал, чем больше растягиваешь, тем больше используется кисть :)
мне кажется немного странным использовать только кисть для рендеринга MediaElement? какова причина и цель этого?