-1

XAML でボタン クリックで開くことができる modless Window/Pop up を作成することが可能です。親ウィンドウと子の modless ウィンドウを並べて表示できるようにする必要があります。modless ウィンドウは、最初はグリッドに収まる必要があり、クリックすると親レベルに展開する必要があります。

ポップアップ コントロールには複数のバグがあります。展開時のポップアップ コントロールの高さは、画面の高さ 100% ではなく、画面の高さ 75% になります。また、ポップアップ コントロールはデータの読み込みに時間がかかりすぎます。

これが、ポップアップを持つエキスパンダー コントロールのスタイルです。

  <Style TargetType="Expander" x:Key="NotesSlider">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Expander" >
                    <Grid  HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                           Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid}} ,Path=ActualWidth}" 
                           Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid}} ,Path=ActualHeight}"
                           x:Name="GridMain">
                        <Border x:Name="popupBorder" BorderBrush="White">
                            <!--<Popup IsOpen="True" PopupAnimation="Slide" x:Name="SlideOut" StaysOpen="True"
                            Placement="Relative" AllowsTransparency="True" Grid.Column="0" Width="Auto" Height="Auto">-->
                            <controls:PopupNonTopmost IsOpen="True" PopupAnimation="None" Placement="Relative" AllowsTransparency="True" StaysOpen="True"
                                             Topmost="False"  x:Name="SlideOut" Panel.ZIndex="10000" >

                                <Grid Margin="0 0 0 10" x:Name="gridContainer">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" x:Name="NoteHeaderRow"/>
                                        <RowDefinition Name="NotesContentRow" Height="0"/>
                                    </Grid.RowDefinitions>

                                    <Border 
                                Name="NoteBorder" 
                                Grid.Row="0" 
                                Background="{StaticResource NormalBrush}"
                                BorderBrush="{StaticResource NormalBorderBrush}"
                                BorderThickness="1" 
                                CornerRadius="0" >
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="*" />
                                                <ColumnDefinition Width="20" />
                                                <ColumnDefinition Width="20" />
                                            </Grid.ColumnDefinitions>

                                            <ContentPresenter 
                            Grid.Column="0"
                            Margin="4" 
                            ContentSource="Header" 
                            RecognizesAccessKey="True" />

                                            <ToggleButton
                            IsChecked="{Binding Path=IsExpanded,Mode=TwoWay,
                            RelativeSource={RelativeSource TemplatedParent}}"
                            OverridesDefaultStyle="True" 
                            Grid.Column="1"
                            Template="{StaticResource VerticalExpanderToggleButton}" 
                            Background="{StaticResource NormalBrush}" />

                                            <ToggleButton  x:Name="toggleMax"
                            OverridesDefaultStyle="True" 
                            Grid.Column="2"
                            Template="{StaticResource SliderToggleButton}" 
                            Background="{StaticResource NormalBrush}" />

                                        </Grid>
                                    </Border>

                                    <Border 
                    Name="NoteContent" 
                    Grid.Row="1" 
                    Background="{StaticResource WindowBackgroundBrush}"
                    BorderBrush="{StaticResource SolidBorderBrush}" 
                    BorderThickness="1,0,1,1" 
                    CornerRadius="0" >
                                        <ContentPresenter Margin="4" x:Name="content"/>
                                    </Border>

                                </Grid>


                            </controls:PopupNonTopmost>
                            <!--</Popup>-->
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="True" SourceName="toggleMax">
                            <Setter TargetName="SlideOut" Property="PlacementTarget" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"/>
                            <Setter TargetName="SlideOut" Property="Width" Value="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Width,Converter={StaticResource PopupWidthConverter}}"/>
                            <Setter TargetName="SlideOut" Property="Height" Value="{Binding Source={x:Static SystemParameters.WorkArea}, Path=Height,Converter={StaticResource PopupHeightConverter}}"/>
                            <Setter TargetName="popupBorder" Property="BorderBrush" Value="Black"/>
                            <!--<Setter TargetName="SlideOut" Property="Width" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}},Path=Width}"/>
                            <Setter TargetName="SlideOut" Property="Height" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}},Path=ActualHeight}"/>-->


                        </Trigger>

                        <Trigger Property="IsChecked" Value="False" SourceName="toggleMax">
                            <Setter TargetName="SlideOut" Property="PlacementTarget" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid}}}"/>
                            <Setter TargetName="SlideOut" Property="Width" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid}},Path=Width}"/>
                            <Setter TargetName="SlideOut" Property="Height" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Grid}},Path=Height}"/>

                        </Trigger>


                        <Trigger Property="IsExpanded" Value="True">
                            <Setter TargetName="NotesContentRow" Property="Height" Value="{Binding ElementName=Content,Path=DesiredHeight}" />

                        </Trigger>

                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="NoteBorder" Property="Background"
                                    Value="{StaticResource DisabledBackgroundBrush}" />
                            <Setter TargetName="NoteBorder" Property="BorderBrush"
                                    Value="{StaticResource DisabledBorderBrush}" />
                            <Setter Property="Foreground"
                                    Value="{StaticResource DisabledForegroundBrush}"/>
                        </Trigger>


                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
4

1 に答える 1

0

ポップアップの既知の問題だと思います。ここに文書化されています: http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.placementmode%28VS.85%29.aspx

そのため、ポップアップ コントロールを使用せずに別の方法で行う必要があります。

于 2012-07-20T18:47:24.533 に答える