2015-05-21 14 views
0

Элемент интерфейса WPF определяет ширину и высоту, фон установлен на кисть изображения и указывает источник изображения на некоторые случайные изображения во время выполнения. Свойство растягивания не задано, поэтому я предполагаю, что это значение по умолчанию «Заполнение», которое входит в игру. Поскольку размер управления и размер изображения различны, во время выполнения кисть фонового изображения заполняется некоторым соотношением сторон, то есть с заполнением (визуально) внутри элемента управления. Есть ли способ получить эти дополнительные значения?Получить отступы, вызванные значением растяжки Uniform

Пример кода:

<Grid Width="2000" Height="2000"> 
<ListBox> 
    <ListBox.Background> 
     <ImageBrush ImageSource="{Binding Source={x:Static local:MyModel.Instance},Path=ImageSource,Converter={StaticResource pathImageConverter}}" /> 
    </ListBox.Background> 
</ListBox> 
</Grid> 

Вместо кисти изображения, если я использую цвет, он заполняет всю area.But, если я использую изображение сказать 5000 * 4000 размер, он растягивает несколько заполнить внутри пространства (без перекоса и обрезки). Это не реальное дополнение, визуально мы чувствуем, что есть дополнение из границ окна списка и границ изображений. Позвольте мне попытаться получить снимок этого.

+0

Значение по умолчанию из ' Stretch'property - 'Fill'. Таким образом, «прокладка», которую вы видите, вероятно, не вызвана ImageBrush. – Clemens

+0

@Clemens, да по умолчанию это «Заполнить». Спасибо – Shanadas

+0

@Clemens, мой оригинальный вопрос по-прежнему стоит. – Shanadas

ответ

1

Есть несколько инструментов, чтобы получить эти значения, и где они назначаются при запуске приложения:

И, наверное, больше, но это те, которые я использовать при столкновении с проблемой, подобной вашей.

+0

Спасибо Томас, но я ищу некоторый API, который помогает мне получить эти значения во время выполнения. – Shanadas

+0

Они захватывают значения во время выполнения. –

+0

Я предполагаю, что эти приложения оценивают размеры независимо друг от друга. В моем случае мне нужно получить доступ к этим значениям и перейти к другому API для обработки. – Shanadas

1

Существует нет API для получения этих значений, я боюсь, что вам нужно делать вычисления самостоятельно. Позвольте мне подробнее ...

Как указано в комментариях, ImageBrush не вызывает вашего заполнения. Кисть будет просто рисовать область, которую она получает. Конечно, в зависимости от режима ImageBrush, он не будет рисовать всю область, а только часть. Изменение кисти на SolidColorBrush покажет вам всю область, в которую попадет кисть. Это должно быть идентично области, которую будет заполнять кисть изображения, если она помещена в ... ну, Fill режим.

Однако я очень сомневаюсь, что это щетка, а скорее ControlTemplateListBox. Если вы работаете в теме Aero, по умолчанию шаблон начинается с Border, у которого есть свой шаблон свойств Background, привязанный к ListBox, и он делает то же самое с BorderThickness (и, чтобы усугубить ситуацию, он также имеет фиксированное заполнение 1, однако, поверх этого рисунка).

Так, чтобы вычислить «заполнение» кисти, что вам нужно сделать, как the sameBorder делает: BorderThickness + Padding.

Однако, если вы работаете в другой теме, или если ваши средства управления были рестайлинг, то ваши шаблоны управления могут быть разными, и расчет может отличаться ...