2013-01-18 63 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

我會在週末後檢查一下,非常感謝。 –