Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Проблемы с заполнением доступного пространства в Grid / 4 сообщений из 4, страница 1 из 1
09.07.2014, 17:06
    #38692196
NewBarbarian
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с заполнением доступного пространства в Grid
Проблема в следующем. Имеется трехстрочный Grid. В первой и последней строке размещены некие контролы, в средней строке помещен GridSpliter. Для первой строки Heigh = "*", для остальных Heigh = "Auto". Также существует checkbox при помощи которого меняется видимость GridSpliter и контрола в последней строке на Colapsed/Visible. Я хочу, чтобы когда GridSpliter и контрол в последней строке невидимы, контрол из первой строки занимал все оставшееся пространство, но этого не происходит. См. код и скриншоты ниже..
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
<UserControl x:Class="ChartView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:d3="http://research.microsoft.com/DynamicDataDisplay/1.0"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Border>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Border Margin="3">
                <Grid Grid.Row="0"  >
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    
                    <d3:ChartPlotter x:Name="TopPlotter"
                                     LegendVisibility="Hidden"
                                     NewLegendVisible="False"
                                     Foreground="{Binding ChartPanels[0].Foreground}"           
                                     Background= "{Binding ChartPanels[0].Background}"
                                     Visibility="{Binding ChartPanels[0].Visibility}" >
                        <d3:ChartPlotter.MainVerticalAxis >
                            <d3:VerticalAxis Name="TopVerticalAxis" Placement="Right" Width="{Binding VerticalAxisWidth}" />
                        </d3:ChartPlotter.MainVerticalAxis>
                        <d3:FilteredMarkerPointsGraph
                            DataSource="{Binding ChartPanels[0].DataSource, UpdateSourceTrigger=PropertyChanged}"
                            Marker="{Binding ChartPanels[0].GraphMarker}"/>
                        <d3:WidthSpring SourcePanel="{Binding LeftPanel, ElementName=BotPlotter}"/>
                    </d3:ChartPlotter>

                    <GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" Margin="0" Background="LightGray"
                        Visibility="{Binding ElementName=BotPlotter, Path=Visibility}"/>


                    <d3:ChartPlotter  Grid.Row="2" x:Name="BotPlotter"
                                                LegendVisibility="Hidden"
                                                NewLegendVisible="False"
                                                Foreground="{Binding ChartPanels[1].Foreground}"           
                                                Background= "{Binding ChartPanels[1].Background}"
                                                Visibility="{Binding ChartPanels[1].Visibility}"
                                                MainHorizontalAxisVisibility="{Binding BotHorizontalAxisVisibility, UpdateSourceTrigger=PropertyChanged}" >
                        <d3:ChartPlotter.MainVerticalAxis>
                            <d3:VerticalAxis Name="BotVerticalAxis" Placement="Right" Width="{Binding VerticalAxisWidth}"/>
                        </d3:ChartPlotter.MainVerticalAxis>
                        <d3:FilteredMarkerPointsGraph
                            DataSource="{Binding ChartPanels[1].DataSource, UpdateSourceTrigger=PropertyChanged}"
                            Marker="{Binding ChartPanels[1].GraphMarker}"/>
                        <d3:WidthSpring SourcePanel="{Binding LeftPanel, ElementName=TopPlotter}"/>
                    </d3:ChartPlotter>
                </Grid>
            </Border>
            <StatusBar Grid.Row="1" Height="25" />
        </Grid>
    </Border>
</UserControl>
...
Рейтинг: 0 / 0
09.07.2014, 17:08
    #38692197
NewBarbarian
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с заполнением доступного пространства в Grid
Так получается когда скрываем второй контрол и гридсплиттер
...
Рейтинг: 0 / 0
09.07.2014, 18:30
    #38692287
NewBarbarian
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с заполнением доступного пространства в Grid
Спасение утопающих, дело рук самих утопающих. При перетаскивании GridSplitter Height меняется на конкретное значение, поэтому при коллапсе высота строки остается неизменной. Нашел у буржуев следующие решение - работает...

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto">
                            <RowDefinition.Style>
                                <Style TargetType="{x:Type RowDefinition}">
                                 <Style.Triggers>
                                       <DataTrigger Binding="{Binding ElementName=BotPlotter, Path=Visibility}" Value="Collapsed">
                                 <Setter Property="MaxHeight" Value="0"/>
                                </DataTrigger>
                               </Style.Triggers>
                            </Style>
                            </RowDefinition.Style>
                        </RowDefinition>
 </Grid.RowDefinitions>
...
Рейтинг: 0 / 0
09.07.2014, 18:32
    #38692290
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с заполнением доступного пространства в Grid
GridSplitter при перемещении устанавливает ысоту строки грида в абсолютное значение, это проверено, поэтому установка Visibility = Collapsed для содержимого строки грида всего лишь скрывает содержимое, но пустое пространство, занимаемое строкой, остается. Здесь нужно забиндить (Mode = TwoWay) строку с изменяемой высотой на свойство модели, отслеживать значение высоты в строке в свойстве, по снятию чекбокса выставлять значение свойства в 0, при установке - возвращать запомненное значение.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Проблемы с заполнением доступного пространства в Grid / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]