2013-01-18 64 views
1

我有以下弹出窗口:WPF弹出失去焦点,但撑开

<Popup Name="popupBind" 
       AllowsTransparency="True" 
       Helpers:FocusHelper.IsFocused="{Binding RelativeSource={RelativeSource Self}, 
                 Path=IsOpen, 
                 Mode=OneWay}" 
       HorizontalOffset="-30" 
       IsOpen="{Binding IsBindingBegun, 
           Mode=TwoWay}" 
       Placement="Bottom" 
       PlacementTarget="{Binding ElementName=bindButton}" 
       StaysOpen="False" 
       > 
      <Border Background="{DynamicResource {x:Static Styles:CommonStyles.ButtonsPanelBackgroundKey}}" 
        BorderBrush="Black" 
        BorderThickness="1" 
        Padding="0"> 
       <StackPanel HorizontalAlignment="Stretch"> 

        <StackPanel.Resources> 
         <TemplateSelectors:VersionRangeDataTemplateSelector x:Key="VersionRangeDataTemplateSelector" /> 
         <Converters:RangeToVisibilityConverter x:Key="RangeToVisibilityConverter" /> 
        </StackPanel.Resources> 

        <StackPanel Margin="5,5,5,2" 
           HorizontalAlignment="Stretch" 
           Orientation="Horizontal"> 

         <StackPanel.Resources> 
          <Style TargetType="Button"> 
           <Setter Property="Margin" Value="5" /> 
          </Style> 
         </StackPanel.Resources> 

         <Button Command="{Binding BindCommand}" 
           > 
         </Button> 
         <Button Command="{Binding BindCommand}" 
           > 
         </Button> 
         <Button Command="{Binding BindCommand}" 
           > 
         </Button> 
         <Button Command="{Binding BindCommand}" 
           > 
         </Button> 
        </StackPanel> 

        <ItemsControl Margin="10,2,5,5" 
            Focusable="False" 
            Grid.IsSharedSizeScope="True" 
            ItemTemplateSelector="{StaticResource VersionRangeDataTemplateSelector}" 
            ItemsSource="{Binding Path=VersionsVm.TempRanges}"> 
         <ItemsControl.Resources> 
          <Style TargetType="CheckBox"> 
           <Setter Property="VerticalAlignment" Value="Center" /> 
           <Setter Property="Padding" Value="0" /> 
          </Style> 

          <Style TargetType="TextBlock"> 
           <Setter Property="FontSize" Value="14" /> 
           <Setter Property="VerticalAlignment" Value="Center" /> 
           <Setter Property="Padding" Value="2" /> 
          </Style> 

          <DataTemplate x:Key="TwoDistinctVersionsRangeTemplateKey"> 
           <Grid Margin="2,4" HorizontalAlignment="Stretch"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="_1" /> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="_2" /> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="_3" /> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="_4" /> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="_5" /> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="_6" /> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="_7" /> 
            </Grid.ColumnDefinitions> 

            <CheckBox Grid.Column="0" IsChecked="{Binding IncludeStartEdge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 

            <TextBlock Grid.Column="1" Margin="2,0,5,0"> 
             <TextBlock.Style> 
              <Style TargetType="TextBlock"> 
               <Style.Triggers> 
                <DataTrigger Binding="{Binding IncludeStartEdge}" Value="True"> 
                 <Setter Property="Text" Value="[" /> 
                </DataTrigger> 
                <DataTrigger Binding="{Binding IncludeStartEdge}" Value="False"> 
                 <Setter Property="Text" Value="(" /> 
                </DataTrigger> 
               </Style.Triggers> 
              </Style> 
             </TextBlock.Style> 
            </TextBlock> 

            <TextBlock Grid.Column="2" 
               HorizontalAlignment="Left" 
               Text="{Binding FromVersionName}" 
               TextAlignment="Left" /> 

            <TextBlock Grid.Column="3" 
               Width="10" 
               Margin="5,0" 
               HorizontalAlignment="Center" 
               Text="-" 
               TextAlignment="Center" /> 

            <TextBlock Grid.Column="4" 
               HorizontalAlignment="Left" 
               Text="{Binding ToVersionName}" 
               TextAlignment="Left" /> 

            <TextBlock Grid.Column="5" Margin="5,0,2,0"> 
             <TextBlock.Style> 
              <Style TargetType="TextBlock"> 
               <Style.Triggers> 
                <DataTrigger Binding="{Binding IncludeEndEdge}" Value="True"> 
                 <Setter Property="Text" Value="]" /> 
                </DataTrigger> 
                <DataTrigger Binding="{Binding IncludeEndEdge}" Value="False"> 
                 <Setter Property="Text" Value=")" /> 
                </DataTrigger> 
               </Style.Triggers> 
              </Style> 
             </TextBlock.Style> 
            </TextBlock> 

            <CheckBox Grid.Column="6" IsChecked="{Binding IncludeEndEdge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
           </Grid> 
          </DataTemplate> 

          <DataTemplate x:Key="FixedVersionRangeTemplateKey"> 
           <StackPanel> 
            <TextBlock Margin="2,4" 
               HorizontalAlignment="Left" 
               VerticalAlignment="Center" 
               Text="{Binding FromVersionName}" 
               TextAlignment="Left" /> 
            <StackPanel> 
             <StackPanel.Visibility> 
              <MultiBinding Converter="{StaticResource RangeToVisibilityConverter}"> 
               <MultiBinding.Bindings> 
                <Binding /> 
                <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=UserControl}" /> 
               </MultiBinding.Bindings> 
              </MultiBinding> 
             </StackPanel.Visibility> 
             <RadioButton Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                             AncestorType=UserControl}, 
                     Path=DataContext.VersionsVm.ChangeTempRangeTypeCommand}" 
                               Content="&lt;" /> 
             <RadioButton Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                             AncestorType=UserControl}, 
                     Path=DataContext.VersionsVm.ChangeTempRangeTypeCommand}"               
                Content="&lt;=" /> 
             <RadioButton Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                             AncestorType=UserControl}, 
                     Path=DataContext.VersionsVm.ChangeTempRangeTypeCommand}"               
                Content="=" 
                IsChecked="True" /> 
             <RadioButton Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                             AncestorType=UserControl}, 
                     Path=DataContext.VersionsVm.ChangeTempRangeTypeCommand}" 
                               Content="&gt;=" /> 
             <RadioButton Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
                             AncestorType=UserControl}, 
                     Path=DataContext.VersionsVm.ChangeTempRangeTypeCommand}" 
                               Content="&gt;" /> 
            </StackPanel> 
           </StackPanel> 
          </DataTemplate> 
         </ItemsControl.Resources> 
        </ItemsControl> 
       </StackPanel> 
      </Border> 
     </Popup> 

我有这是一个非常奇怪的问题。
当我点击Tab键时,左侧或右侧焦点会弹出并转到父窗口。 Popus保持打开状态。
我不知道为什么会发生这种情况。但是我的键盘导航有问题。
我唯一可以怀疑的原因是Popup的父类是WinForce ElementHost内托管的UserControl。
我不知道如何调试这个问题,所以我感谢任何有用的提示。
预先感谢您。

+0

什么设置IsBindingBegun属性? –

+0

这不是绑定=)它是实体的绑定 - 使它们相关。除了名称之外,WPF Binding没有什么共同之处。 –

回答

3

在IsOpen上具有绑定可以覆盖StaysOpen行为。我看不到更多,但如果该IsOpen绑定持续从其来源的值将保持打开Popup无论发生什么与焦点。

+0

是的,我想,绑定IsOpen是原因。但我不知道为什么键盘导航不起作用。 –

+0

再一次,我不知道其他代码是怎么回事,但我怀疑FocusHelper.IsFocused绑定可能与你的焦点混为一体,因为只要Popup显示并且可能会保持真实防止包含的控件不断聚焦。 –

+0

我会在周末后检查一下,非常感谢。 –