'Determine when the popup of a combobox encounters the edge of the screen and changes target origin changes to the top-left corner of the target area

I have an issue with popup placement. If the combobox encounters the edge of the screen then the target origin changes to the top-left corner of the target area and the popup alignment point changes to the bottom-left corner of the Popup. This is a problem for me because I changed the style of combobox to have rounded corners. This is how it looks normally and this is how it looks wen encountering the edge of the screen

I have defined a style and I tried to set a trigger on 'Placement' property of the combobox but without success. This is my style:

<Style
    x:Key="FormComboboxStyle"
    BasedOn="{StaticResource BaseStyle}"
    TargetType="ComboBox">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
    <Setter Property="Padding"
            Value="5" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ComboBox">
                <Grid>
                    <ToggleButton
                        Name="ToggleButton"
                        Template="{StaticResource ComboBoxToggleButton}"
                        Grid.Column="2"
                        Focusable="false"
                        IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"
                        ClickMode="Press">
                    </ToggleButton>
                    <ContentPresenter
                        Name="ContentSite"
                        IsHitTestVisible="False"
                        Content="{TemplateBinding SelectionBoxItem}"
                        ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                        ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                        Margin="{TemplateBinding Padding}"
                        VerticalAlignment="Center"
                        HorizontalAlignment="Left" />
                    <TextBox x:Name="PART_EditableTextBox"
                        Style="{StaticResource ComboBoxTextBoxStyle}"
                        Template="{StaticResource ComboBoxTextBox}"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Center"
                        Margin="{TemplateBinding Padding}"
                        Focusable="True"
                        Background="Transparent"
                        Visibility="Hidden"
                        IsReadOnly="{TemplateBinding IsReadOnly}" />
                    <Popup
                        Name="Popup"
                        IsOpen="{TemplateBinding IsDropDownOpen}"
                        Placement="Bottom"
                        AllowsTransparency="True"
                        Focusable="False"
                        VerticalOffset="0"
                        HorizontalOffset="0"
                        PopupAnimation="Slide">
                        <Grid
                            Name="DropDown"
                            SnapsToDevicePixels="True"
                            MinWidth="{TemplateBinding ActualWidth}"
                            MaxHeight="{TemplateBinding MaxDropDownHeight}">
                            <Border
                                x:Name="DropDownBorder"
                                Background="{DynamicResource WhiteColor}"
                                BorderThickness="2,0,2,2"
                                CornerRadius="0 0 5 5"
                                Padding="0"
                                BorderBrush="{DynamicResource PrimaryGrayColor}" />
                            <ScrollViewer Margin="4,2,4,6" SnapsToDevicePixels="True">
                                <StackPanel
                                    IsItemsHost="True"
                                    KeyboardNavigation.DirectionalNavigation="Contained" />
                            </ScrollViewer>
                        </Grid>
                    </Popup>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="HasItems" Value="false">
                        <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" />
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="{DynamicResource DisabledPrimaryGrayColor}" />
                    </Trigger>
                    <Trigger Property="IsGrouping" Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
                    </Trigger>
                    <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
                        <Setter TargetName="DropDownBorder" Property="Margin" Value="0,0,0,0" />
                    </Trigger>
                    <Trigger Property="IsEditable"
                        Value="true">
                        <Setter Property="IsTabStop" Value="false" />
                        <Setter TargetName="PART_EditableTextBox" Property="Visibility"    Value="Visible" />
                        <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


Solution 1:[1]

According to When the Popup Encounters the Edge of the Screen, "For security reasons, a Popup cannot be hidden by the edge of a screen." Therefore you can not forcibly place a Popup under the ComboBox if it will hide the Popup.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 emoacht