2013-04-25 81 views
1

我在列表框內部彈出。我從列表框中選擇項目後,如何關閉彈出窗口; 這裏是代碼:Wpf當選擇ListboxItem時關閉彈出框

<Popup x:Name="ColorPopup" AllowsTransparency="True" 
IsOpen="{Binding ElementName=ColorToggle, Path=IsChecked}" Placement="Bottom" StaysOpen="False" PlacementTarget="{Binding ElementName=ColorToggle}"> 

    <Border x:Name="DropDownBorder1" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" Margin="0, 0,5,5" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" Effect="{DynamicResource WindowShadowEffect}"> 
     <ListBox Name="ColorList" VerticalContentAlignment="Stretch" Margin="1, 3, 1, 3" IsEnabled="True" Grid.Column="0" Background="Transparent" HorizontalContentAlignment="Center" SelectedItem="{Binding fColor}" SelectionMode="Single" Style="{StaticResource HorizontalListBoxStyle2}" ItemsSource="{Binding FillColors}"> 
     </ListBox> 

    </Border> 

</Popup> 

回答

2

訂閱SelectionChanged事件。

你可以做到這一點在後臺代碼:

private void ListBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e) 
{ 
    // ColorPopup.IsOpen = false; ?? or ColorToggle.IsChecked = false; 
} 
<ListBox SelectionChanged="ListBox_SelectionChanged_1" ... /> 

也許如果你使用MVVM模式...

這可能是這樣的,例如用於MVVM光強:

<ListBox ...> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <cmd:EventToCommand Command="{Binding Path=ClosePopupCommand}" PassEventArgsToCommand="True" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ListBox> 

或棱鏡幾乎可以是相同的:

<ListBox> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="SelectionChanged"> 
       <prism:InvokeCommandAction Command="{Binding Path=ClosePupupCommand}" /> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
</ListBox> 

或者如果你有髒兮兮的話,你也可以在fColor屬性設置器中關閉彈出窗口。 :)

public object fColor 
    { 
     get 
     { 
      return this.fColorField; 
     } 

     set 
     { 
      this.fColorField= value; 
      IsColorToggelChecked = false; 
      RaisePropertyChanged(() => this.fColor); 
     } 
    }