Пространство управления пользователями WPF не используется другими при его свертывании - PullRequest
0 голосов
/ 29 января 2019

В моем основном окне WPF у меня есть распределение ниже:

<Border BorderBrush="SkyBlue"
        Background="White"
        BorderThickness="1"
        CornerRadius="20 0 0 0">

        <DockPanel>

            <Border x:Name="WindowTitleBar"  
                    DockPanel.Dock="Top"
                    CornerRadius="20 0 0 0"                                        
                    Background="LightBlue">

                    <DockPanel DockPanel.Dock="Top">

                    <!-- Here are textblocks and a status bar simulating a window title bar with maximize, minimize and close buttons -->

                    </DockPanel>                    
            </Border>

            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />    <!-- Content -->                
                    <RowDefinition Height="auto" /> <!-- Status bar at bottom -->                   
                </Grid.RowDefinitions>

                <Grid Grid.Row="0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" />
                        <RowDefinition Height="auto" />
                    </Grid.RowDefinitions>

                    <Grid x:Name="Grid" Grid.Row="0">
                        <Grid.RowDefinitions>                           
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="auto" />
                            <RowDefinition Height="auto" />
                        </Grid.RowDefinitions>

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="0.60*" />
                            <ColumnDefinition Width="0.47*" />
                        </Grid.ColumnDefinitions>

                        <controls:MyUC_01 Grid.Row="0" Grid.Column="0"                                                
                                          Width="auto"
                                          Height="auto"
                                          DataContext="{Binding}" />

                        <controls:MyUC_02 Grid.Row="1" Grid.Column="0" 
                                          Width="auto"
                                          Height="auto"
                                          DataContext="{Binding}" />        

                        <controls:MyUC_03 Grid.Row="2" Grid.Column="0"   
                                          Width="auto"
                                          Height="auto"
                                          DataContext="{Binding}" />

                        <Expander Grid.Row="0" Grid.RowSpan="3"
                                  Grid.Column="1"       
                                  Collapsed="Expander_Collapsed"
                                  Expanded="Expander_Expanded"
                                  ExpandDirection="Left"
                                  IsExpanded="True">

                                  <!-- Expander content -->
                        </Expander>                               

                    </Grid>

                    <!-- BELOW SPACE OCCUPIED BY UCMessage KEEP BLANK WHEN VIEW MODEL PROPERTY MessageVisibility IS SET TO COLLAPSE -->
                    <controls:UCMessage Grid.Row="1" x:Name="UCMessage"
                                        Width="auto"
                                        Height="auto"
                                        DataContext="{Binding}" 
                                        Visibility="{Binding Path=MessageVisibility}" />
                </Grid>
            </Grid>

        </DockPanel>
</Border>   

Когда пользовательский элемент управления UCMessage свернут (в зависимости от значения свойства модели представления MessageVisibility), его пространство не используется остальными элементами управления иэто остается пустым.Даже при изменении размера окна это пространство не используется другими.Строка, в которой размещено сообщение UCMessage, установлена ​​на высоту = авто, но она не работает.

Ниже приведенное выше распределение в качестве примера:

enter image description here

1 Ответ

0 голосов
/ 31 января 2019

В вашем коде для привязки «MessageVisibility» ... установлено значение «Hidden» или «Collapsed».Это две разные вещи ... Скрытые средства сохраняют пространство, даже если не показаны.Свернутый - это не показывать и не сохранять пространство, если это явно не требуется и, следовательно, не становится видимым.

Если это не сработает, иногда я замечаю, что привязки могут быть не такими, как они появляются.Если ваша привязка сообщения относится к основному контексту данных, а не к какому-либо дочернему элементу / свойству самого пользовательского элемента управления, вам, возможно, нужно обернуть его, например,

<UserControl Grid.Row="1" Visibility="{Binding Path=MessageVisibility}">
    <controls:UCMessage 
        x:Name="UCMessage"
        Width="auto"
        Height="auto"
        DataContext="{Binding}" />
</UserControl>
...