Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать Border со ScrollViewer внутри 
:(
    Опции темы
Человек01
Дата 9.3.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



Диспозиция:
Имеется Grid три на три, в центральной ячейке выводится мой UserControl хочу сделать так, чтобы если UserControl не вмещается в Grid появлялся ScrollBar(Это то работает нормально с ScrollViewer ), но так же хочу сделать чтобы вся эта композиция отображалась бы в Border (а вот тут проблемы).
То есть, без Border всё работает замечательно, но стоит появиться Border, так ScrollViewer перестает работать.
Из за чего так получается понятно, ScrollViewer-у пофигу на Border, он от него не как не зависит(родственно только smile )...
Код

<Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />                
            </Grid.RowDefinitions>
            <Border Grid.Column="1" Grid.Row="1"  Background="Red" >
                <ScrollViewer Margin="10" VerticalScrollBarVisibility="Auto">
                    <evrika:testik></evrika:testik>
                </ScrollViewer>
            </Border>
        </Grid>

Вопрос: Как сделать эту структуру дееспособной...

P.S.: Если за место <RowDefinition Height="Auto" />   сделать <RowDefinition Height="100" />, тогда всё ведет себя так как надо, но вот только как раз и хочется, чтобы высота могла меняться в зависимости от высоты UserControl, а при его черезмерно большом значениии, срабатывал бы ScrollViewer .

Элементарный пример UserControl :
Код

<UserControl x:Class="test01.testik"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <TextBox MinWidth="100" TextWrapping="Wrap" MaxWidth="200"></TextBox>
    </Grid>
</UserControl>


Совопрос: Объясните мне пожалуйста, почему если использовать за место <RowDefinition Height="Auto" /> , конструкцию <RowDefinition Height="Auto" MaxHeight="100"/> ограничение(MaxHeight="100")  не срабатывает?


Это сообщение отредактировал(а) Человек01 - 9.3.2009, 16:35
PM MAIL ICQ   Вверх
Человек01
Дата 9.3.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



В общем разобрался.
1.То что вся эта конструкция у меня помещалась в ещё один Grid:
Код

<Grid Name="sepergrid">
   <Grid Name="minigrid">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />                
            </Grid.RowDefinitions>
            <Border Grid.Column="1" Grid.Row="1"  Background="Red" >
                <ScrollViewer Margin="10" VerticalScrollBarVisibility="Auto">
                    <evrika:testik></evrika:testik>
                </ScrollViewer>
            </Border>
   </Grid>
</Grid>

А далее по тексту, у minigrid ActualHeight меняется и зависит от высоты <evrika:testik>, при этом ActualHeight может быть даже  больше высоты родительского Grid(supergrid) храня в Height значение NaN. Соответственно и попытки привязаться к данным величинам в качестве ограничения высоты ScrollViewer были безуспешны.

Ответ: ограничить ScrollViewer.MaxHeight высотой, вернее ActualHeight sepergrid-а, а так как у ScrollViewer используется Margin=10, то требуется уменьшить значение ActualHeight sepergrid-а(с помощью IValueConverter)

Вот пример работающей штуковенции:
Код

....
<Window.Resources>
        <evrika:HeigthConverter x:Key="convertttt"></evrika:HeigthConverter>
         .....
</Window.Resources>
....
<Grid Name="supergrid">
     <Grid Name="minigrid">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Name="qwe1" Height="Auto"/>
                <RowDefinition Height="*" />                
            </Grid.RowDefinitions>
            <Border Grid.Column="1" Grid.Row="1"  Background="LightBlue" CornerRadius="10" BorderBrush="Black" BorderThickness="1"  >
                <ScrollViewer Margin="10" VerticalScrollBarVisibility="Auto">
                    <ScrollViewer.MaxHeight>
                        <Binding ElementName="supergrid"
                             Path="ActualHeight"
                             Converter="{StaticResource convertttt}">
                        </Binding>
                    </ScrollViewer.MaxHeight>
                    <evrika:testik ></evrika:testik>
                </ScrollViewer>
            </Border>
     </Grid>
</Grid>
...


И собственно 
Код

    public class HeigthConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
         object parameter, CultureInfo culture)
        {
            double d = (double)value;
            return (d - 50);
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

Вот и всё, надеюсь кому то будет полезно.
Искренне Ваш Человек.
 smile 

P.S.: А причина почему  MaxHeight="100" не работает так и осталось для меня загадкой
При Debsgging установил:
Что значения RowDefinition Name="qwe1":
qwe1.MaxHeight      - 100
qwe1.Height            -  Auto
qwe1.ActualHeight   - может принимать абсолютно любое значение (Видимо ограничение работает только при числовых значениях Height)


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.