Программное растягивание изображений в WPF

В приложении WPF с использованием XAML,

Я создал стековую панель (шириной 1030) и у меня есть 2 изображения. 1. imgClient width = 784 Height = 66 и 2. imgClientExtra width = 1 и Height = 66.

imgClientExtra будет правым концом, а imgClient - левым концом.

Таким образом, изображения будут соответствовать 784 + 1, когда приложение не запущено, общая ширина изображения составляет 785 (784 + 1) .. но, когда приложение работает .. изображение должно растягиваться до 1030 ... с imgClientExtra будет на 1030, а imgClient нужно будет растянуть только до 1029 ..

Я использовал stretch.fill ... но не сработало.

В настоящее время я использую этот способ ... это нужно изменить?

     <StackPanel Name="stkpnlHeader" Margin="0,0,0,0" Width="1254.662" Height="auto" HorizontalAlignment="Left" VerticalAlignment="Top">
                <StackPanel Name="imgStkPnl"Orientation="Vertical" Width="1253.511" HorizontalAlignment="Left">
                    <Image Name="imgClientPhoto" HorizontalAlignment="Left" VerticalAlignment="Top" Width="784" Height="66" 
                   Source="D:\ehtmp_top_left.gif" Stretch="Fill" StretchDirection="Both">

                    </Image>
                    <Image Name="imgExtraImg"   Width="1" Height="66" Margin="0,-66,0,0" HorizontalAlignment="Right" 
                       Source="D:\ehtmp_top_right.gif"
                       ></Image>
                </StackPanel> </StackPanel>

person user301016    schedule 28.07.2009    source источник


Ответы (2)


Переход от панели стека к сетке. Задайте определения Grid.Column. Создание двух определений столбцов. Вы можете использовать «Ширина», чтобы задать ширину «соотношения». Например, colA Width = "5 *" и colB Width = "3 *" означает, что colA получает 5/8 сетки, а colB получает 3/8 сетки. Объедините эту концепцию с настройкой MinWidth и MaxWidth, и все будет хорошо.

Кроме того, при установке ширины в коде вам часто необходимо проверять ширину существующих элементов управления, используя свойство «ActualWidth», а не «Ширина» (которое иногда возвращает NaN).

person DarkwingDuck    schedule 28.07.2009
comment
H Darkwing .. Я отредактировал свой запрос и добавил сюда код xaml .. мне нужно заменить stackpanel (imgStkPnl) на сетку, чтобы это работало /? Благодарность - person user301016; 28.07.2009
comment
Привет ... Только что добавил эту часть .. Я думаю, что все еще ошибаюсь ‹Grid HorizontalAlignment = Left Height = 66› ‹Grid.ColumnDefinitions› ‹ColumnDefinition Width = 784 *› ‹/ColumnDefinition› ‹ColumnDefinition Width = *› ‹/ ColumnDefinition ›‹ /Grid.ColumnDefinitions ›фактическое изображение | ____________ || _ | когда приложение ap не запущено ,. но когда я запускаю приложение, оно должно быть | ___________________________________________________________ || _ | Пожалуйста, помогите Спасибо Рамм - person user301016; 28.07.2009
comment
Похоже, у вас есть панель стека внутри другой панели стека. Это, наверное, действительно бессмысленно. Вам нужна только одна панель стека, которая будет складывать 2 изображения. Тогда не устанавливайте фактическую ширину ваших изображений. На левом изображении установите MinWidth, равное 784, а на правом изображении, MinWidth, равное 1. Если все еще не работает, опубликуйте обновленный пример, очистите пример, удалив Имя, поля, выравнивание и т. Д., Потому что это мешает читаемость - person DarkwingDuck; 29.07.2009

Я бы подумал, что DockPanel в вашем случае будет работать, поскольку он автоматически растягивает последний элемент (я не пробовал создавать этот код, поэтому дайте мне знать, если он не сработает):

<DockPanel Height="66">
    <Image Name="imgExtraImg" Source="D:\ehtmp_top_right.gif" DockPanel.Dock="Right"/>
    <Image Name="imgClientPhoto" Source="D:\ehtmp_top_left.gif"/>
</DockPanel>
person Mark Synowiec    schedule 28.07.2009
comment
Привет, Марк, спасибо за помощь. Я пробовал использовать сетку. это сработало. Выкладываю для справки, спасибо Рамм - person user301016; 29.07.2009