WPF Popup не изменяет размер при изменении содержимого - PullRequest
0 голосов
/ 05 апреля 2020

Несмотря на поиски подобной ситуации я не мог найти что-либо сравнимое с автоматически изменение размера содержимого всплывающего в зависимости от его содержания.

1002 * В конце концов, я пропустил что-то очевидное, но после того, как создан мой Всплывающее stubornly отказывается пересчитывать его размер и расположение содержимого при изменении содержимого.

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

Теперь, когда всплывающее окно создается впервые, его ширина будет соответствовать желаемому размеру. ListView, так что все элементы представления списка (внутри GridView).

Initial Popup created properly

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

К сожалению, всплывающее окно и его содержимое просто отказываются меняться, и в результате содержимое обрезается.

Height does change, but width just refuses to update

Я уже пытался аннулировать расположение и измерение всплывающих окон и вызвал UpdateLayout для Popup и / или ListView, но пока безуспешно ... Элемент GridView Мне не удалось получить к нему доступ или управлять им ...

Есть ли способ принудительно пересчитать общий макет всплывающего окна или ListView?

<Popup x:Name           = "hintPopup"
       Placement        = "Bottom"
       PlacementTarget  = "{Binding ElementName=textBox}"
       MinWidth         = "{Binding ElementName=textBox, Path=ActualWidth}"
       IsOpen           = "{Binding ShowPopup, RelativeSource={RelativeSource AncestorType=ccont:vokDataGridEdit}}"
       Margin           = "0,20,0,0">

    <!-- Reference a converter to convert Bool Values to Visibility -->
    <Popup.Resources>
        <conv:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
    </Popup.Resources>

    <!-- Move popup with anchor -->
    <b:Interaction.Behaviors>
        <behav:PopupAutoRepositionBehavior />
    </b:Interaction.Behaviors>

    <Border BorderBrush     = "Gray" 
            BorderThickness = "1"
            Background      = "LightGray"
            Padding         = "1">

        <StackPanel Orientation="Vertical">

            <!-- Title Starts With -->
            <TextBlock Text         = "{x:Static res:Strings.vokDataGridEdit_Popup_TitleStartsWith}"
                       Visibility   = "{Binding ShowHintsStartsWith, RelativeSource={RelativeSource AncestorType=ccont:vokDataGridEdit}, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=collapsed}"
                       FontWeight   = "Bold"
                       Foreground   = "Black"
                       Margin       = "0, 5, 0, 2"/>

            <!-- Hints -->
            <ListView ItemsSource   = "{Binding ItemHintsStartsWith, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=ccont:vokDataGridEdit}}"
                      Visibility    = "{Binding ShowHintsStartsWith, RelativeSource={RelativeSource AncestorType=ccont:vokDataGridEdit}, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=collapsed}"
                      Margin        = "5, 1, 1, 1">

                <!-- Prevent selection -->
                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="Focusable" Value="false"/>
                    </Style>
                </ListView.ItemContainerStyle>

                <!-- Hide Headers -->
                <ListView.Resources>
                    <Style TargetType="GridViewColumnHeader">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </Style>
                </ListView.Resources>

                <ListView.View>
                    <GridView AllowsColumnReorder="False">

                        <GridViewColumn DisplayMemberBinding    = "{Binding Path=valueCurrent}" 
                                        Header                  = "Current"
                                        Width                   = "auto" />

                        <GridViewColumn DisplayMemberBinding    = "{Binding Path=valueTranslated}" 
                                        Header                  = "Translated"
                                        Width                   = "auto" />

                    </GridView>
                </ListView.View>

            </ListView>

            <!-- Title Similar -->
            <TextBlock Text         = "{x:Static res:Strings.vokDataGridEdit_Popup_Similar}"
                       Visibility   = "{Binding ShowHintsSimilar, RelativeSource={RelativeSource AncestorType=ccont:vokDataGridEdit}, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=collapsed}"
                       FontWeight   = "Bold"
                       Foreground   = "Black"
                       Margin       = "0, 5, 0, 2"/>

            <!-- Hints -->
            <ListView ItemsSource   = "{Binding ItemHintsSimilar, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=ccont:vokDataGridEdit}}"
                      Visibility    = "{Binding ShowHintsSimilar, RelativeSource={RelativeSource AncestorType=ccont:vokDataGridEdit}, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=collapsed}"
                      Margin        = "5, 1, 1, 1">

                <!-- Prevent selection -->
                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="Focusable" Value="false"/>
                    </Style>
                </ListView.ItemContainerStyle>

                <!-- Hide Headers -->
                <ListView.Resources>
                    <Style TargetType="GridViewColumnHeader">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </Style>
                </ListView.Resources>

                <ListView.View>
                    <GridView AllowsColumnReorder="False">

                        <GridViewColumn DisplayMemberBinding    = "{Binding Path=valueCurrent}" 
                                        Header                  = "Current"
                                        Width                   = "auto" />

                        <GridViewColumn DisplayMemberBinding    = "{Binding Path=valueTranslated}" 
                                        Header                  = "Translated"
                                        Width                   = "auto" />

                    </GridView>
                </ListView.View>

            </ListView>

        </StackPanel>

    </Border>

</Popup>
...