none
WPF Ribbon закрывает Popup RRS feed

  • Вопрос

  • Доброе время суток! столкнулся с проблемой, пишу на WPF приложение в котором есть Ribbon лента и на одной из ее вкладок RibbonToogleButton на изменение свойства IsChecked которого завязано открытие Popup,  проблема в том что если RibbonToogleButton лежит не на Ribbon ленте, то все нормально Popup открывается, но в обратном случае Popup открывается и сразу закрывается, как я понял сам Ribbon отслеживает событие OnLostMouseCapture в котором всем дочерним Popup элементам делает свойство IsOpen = false; может кто знает как сделать чтобы Popup нормально открывался и соответственно при щелчке мыши в не его пределов закрывался?

    примет моего код:

      <Grid x:Name="LayoutRoot">
            
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <ribbon:Ribbon x:Name="Ribbon" >
                <ribbon:Ribbon.ApplicationMenu>
                    <ribbon:RibbonApplicationMenu SmallImageSource="Images\SmallIcon.png">
                        <ribbon:RibbonApplicationMenuItem Header="Hello _Ribbon"
                                                          x:Name="MenuItem1"
                                                          ImageSource="Images\LargeIcon.png"/>
                    </ribbon:RibbonApplicationMenu>
                </ribbon:Ribbon.ApplicationMenu>
                <ribbon:RibbonTab x:Name="HomeTab" 
                                  Header="Home">
                    <ribbon:RibbonGroup x:Name="Group1" 
                                        Header="Group1">
                        <ribbon:RibbonButton x:Name="Button1"
                                             LargeImageSource="Images\LargeIcon.png"
                                             Label="Button1" />
    
                        <ribbon:RibbonButton x:Name="Button2"
                                             SmallImageSource="Images\SmallIcon.png"
                                             Label="Button2" />
                        <ribbon:RibbonButton x:Name="Button3"
                                             SmallImageSource="Images\SmallIcon.png"
                                             Label="Button3" />
                        <ribbon:RibbonButton x:Name="Button4"
                                             SmallImageSource="Images\SmallIcon.png"
                                             Label="Button4" />
    
                    </ribbon:RibbonGroup>
                    <ribbon:RibbonGroup Name="testGroup">
                        <ribbon:RibbonToggleButton x:Name="btnPop1" Content="Pop!" Width="100" Height="50" LargeImageSource="/WpfRibbonApplication1;component/Images/LargeIcon.png" />
                        <Popup Placement="Bottom" PlacementTarget="{Binding ElementName=btnPop1}" IsOpen="{Binding IsChecked, ElementName=btnPop1}">
                            <Popup.Style>
                                <Style TargetType="{x:Type Popup}">
                                    <Setter Property="StaysOpen" Value="False"/>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding IsMouseOver, ElementName=brd}" Value="True">
                                            <Setter Property="StaysOpen" Value="True"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Popup.Style>
                            <Border x:Name="brd" Background="White" BorderThickness="1" BorderBrush="Black">
                                <StackPanel>
                                    <TextBox Margin="10"/>
                                    <TextBlock Text="Some text is here." Margin="10"/>
                                    <TextBox Margin="10"/>
                                </StackPanel>
                            </Border>
                        </Popup>
                    </ribbon:RibbonGroup>    
                </ribbon:RibbonTab>
            </ribbon:Ribbon>
            <ribbon:RibbonToggleButton x:Name="btnPop" Content="Pop!" Width="100" Height="50" Margin="230,310,0,0" LargeImageSource="/WpfRibbonApplication1;component/Images/LargeIcon.png"/>
            <Popup Placement="Bottom" PlacementTarget="{Binding ElementName=btnPop}" IsOpen="{Binding IsChecked, ElementName=btnPop}">
                <Popup.Style>
                    <Style TargetType="{x:Type Popup}">
                        <Setter Property="StaysOpen" Value="False"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsMouseOver, ElementName=brd1}" Value="True">
                                <Setter Property="StaysOpen" Value="True"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Popup.Style>
                <Border x:Name="brd1" Background="White" BorderThickness="1" BorderBrush="Black">
                    <StackPanel>
                        <TextBox Margin="10"/>
                        <TextBlock Text="Some text is here." Margin="10"/>
                        <TextBox Margin="10"/>
                    </StackPanel>
                </Border>
            </Popup>
        </Grid>
    


    12 октября 2011 г. 10:15

Ответы

  • Здравсвтуйте.

    Определяйте Popup вне риббона, но привязывайте к нужному элементу риббона. Должно получиться:

    <ribbon:RibbonWindow x:Class="WpfRibbonApplication2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
            Title="MainWindow"
    		x:Name="RibbonWindow"
    		Width="640" Height="480">
    
    	<Grid x:Name="LayoutRoot">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <ribbon:Ribbon x:Name="Ribbon" >
                <ribbon:Ribbon.ApplicationMenu>
                    <ribbon:RibbonApplicationMenu SmallImageSource="Images\SmallIcon.png">
                        <ribbon:RibbonApplicationMenuItem Header="Hello _Ribbon"
                                                          x:Name="MenuItem1"
                                                          ImageSource="Images\LargeIcon.png"/>
                    </ribbon:RibbonApplicationMenu>
                </ribbon:Ribbon.ApplicationMenu>
                <ribbon:RibbonTab x:Name="HomeTab" 
                                  Header="Home">
                    <ribbon:RibbonGroup x:Name="Group1" 
                                        Header="Group1">
                        <ribbon:RibbonButton x:Name="Button1"
                                             LargeImageSource="Images\LargeIcon.png"
                                             Label="Button1" />
    
                        <ribbon:RibbonButton x:Name="Button2"
                                             SmallImageSource="Images\SmallIcon.png"
                                             Label="Button2" />
                        <ribbon:RibbonButton x:Name="Button3"
                                             SmallImageSource="Images\SmallIcon.png"
                                             Label="Button3" />
                        <ribbon:RibbonButton x:Name="Button4"
                                             SmallImageSource="Images\SmallIcon.png"
                                             Label="Button4" />
    
                    </ribbon:RibbonGroup>
                    <ribbon:RibbonGroup Name="testGroup" >
                        <ribbon:RibbonToggleButton x:Name="btnPop1" Content="Pop!" Width="100" Height="50" LargeImageSource="Images\LargeIcon.png" />
                    </ribbon:RibbonGroup>
                </ribbon:RibbonTab>
            </ribbon:Ribbon>
            <Popup x:Name="hiPop" Placement="Bottom" PlacementTarget="{Binding ElementName=btnPop1}" IsOpen="{Binding IsChecked, ElementName=btnPop1}">
                <Popup.Style>
                    <Style TargetType="{x:Type Popup}">
                        <Setter Property="StaysOpen" Value="False"/>
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsMouseOver, ElementName=brd1}" Value="True">
                                <Setter Property="StaysOpen" Value="True"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Popup.Style>
                <Border x:Name="brd1" Background="White" BorderThickness="1" BorderBrush="Black">
                    <StackPanel>
                        <TextBox Margin="10"/>
                        <TextBlock Text="Some text is here." Margin="10"/>
                        <TextBox Margin="10"/>
                    </StackPanel>
                </Border>
            </Popup>
    
        </Grid>
    </ribbon:RibbonWindow>
    
    

     


    Для связи [mail]
    • Помечено в качестве ответа Evgeniy1989 13 октября 2011 г. 9:46
    13 октября 2011 г. 7:36