2009-03-09 24 views
2

Bir ComboBox'ın üstüne yığılmış bir metin kutusu var. TextBox, odaklandığı zaman daha uzun sürer (animasyon yoluyla) ve odağı kaybettiğinde geri çekilir.Açılan kutu taşınırken WPF combobox açılır penceresinin kopmasını nasıl önleyebilirim?

Metin Kutusu, ComboBox'a odağı kaybettiğinde sorunlar başlar. Bu olduğunda, Popup (açılır "kısmı) seçimi beklendiği gibi ComboBox'ın hemen altında görünür, ancak ComboBox yukarı doğru hareket etmeye başladığında (yukarıdaki TextBox artık küçülmekte olduğundan), Popup seçimi devam etmez. ve şimdi ComboBox'tan ayrıldı.

Muhtemelen bunun nedeni, Popup'un (tüm Popup'lar gibi) TextBox ve ComboBox ile aynı görsel ağacın bir parçası olmamasıdır. Bu nedenle, animasyon ilerledikçe düzeni yeniden hesaplanmaz.

ComboBox'umu bütün olarak nasıl saklayabilirim?

Bu, yeniden üretmek için XamlPad'e yapıştırabileceğiniz bir kod parçacığıdır. Herhangi bir yardım çok takdir edilir!

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 
    <StackPanel Width="100" Orientation="Vertical"> 
    <TextBox Height="19"> 
     <TextBox.Triggers> 
     <EventTrigger RoutedEvent="UIElement.GotFocus"> 
      <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard TargetProperty="Height"> 
       <DoubleAnimation From="19" To="100" Duration="0:0:0.2"/> 
       </Storyboard> 
      </BeginStoryboard> 
      </EventTrigger.Actions> 
     </EventTrigger> 
     <EventTrigger RoutedEvent="UIElement.LostFocus"> 
      <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard TargetProperty="Height"> 
       <DoubleAnimation From="100" To="19" Duration="0:0:0.2"/> 
       </Storyboard> 
      </BeginStoryboard> 
      </EventTrigger.Actions> 
     </EventTrigger> 
     </TextBox.Triggers> 
    </TextBox> 
    <ComboBox> 
     <ComboBoxItem>Item 1</ComboBoxItem> 
     <ComboBoxItem>Item 2</ComboBoxItem> 
    </ComboBox> 
    </StackPanel> 
</Page> 

Bu aynı zamanda Microsoft Connect sitesinde bir hata olarak nakledilmiş: Bir geçici çözüm burada olduğunu bilmiyoruz

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=422254

cevap

0

. Bununla birlikte, bunu kesinlikle bir hata olarak sınıflandırır ve Microsoft Connect sitesinde dosyalayabilirim.

+0

yapılan: https://connect.microsoft.com/VisualStudio/ geribildirim/ViewFeedback.aspx? FeedbackID = 422254 – nollidge

0

Bu son derece topal geçici çözüm, ancak TextBox yerine ComboBox ComboBox'ın Popup açık akrabası yapabiliriz:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <StackPanel Width="100" Orientation="Vertical"> 
     <TextBox x:Name="myTextBox" Height="19"> 
      <TextBox.Triggers> 
       <EventTrigger RoutedEvent="UIElement.GotFocus"> 
        <EventTrigger.Actions> 
         <BeginStoryboard> 
          <Storyboard TargetProperty="Height"> 
           <DoubleAnimation Duration="0:0:0.2" From="19" To="100"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger.Actions> 
       </EventTrigger> 
       <EventTrigger RoutedEvent="UIElement.LostFocus"> 
        <EventTrigger.Actions> 
         <BeginStoryboard> 
          <Storyboard TargetProperty="Height"> 
           <DoubleAnimation Duration="0:0:0.2" From="100" To="19"/> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger.Actions> 
       </EventTrigger> 
      </TextBox.Triggers> 
     </TextBox> 
     <ComboBox> 
      <ComboBox.Resources> 
       <Style TargetType="{x:Type Popup}"> 
        <Setter Property="PlacementTarget" Value="{Binding ElementName=myTextBox}"/> 
        <Setter Property="PlacementRectangle" Value="0,39,0,0"/> 
       </Style> 
      </ComboBox.Resources> 
      <ComboBoxItem>Item 1</ComboBoxItem> 
      <ComboBoxItem>Item 2</ComboBoxItem> 
     </ComboBox> 
    </StackPanel> 
</Page>