假設你有一個ToggleButton
打開一個Popup
,相同的行爲,所有已知的元素ComboBox
等WPF彈出隱藏的問題
...這是該代碼:
<ToggleButton x:Name="PART_OpenToggleButton"
Focusable="False"
IsChecked="False"
Template="{StaticResource MyToggleButton}">
<Grid>
<Popup x:Name="PART_PopupControl"
Style="{StaticResource MyPopupStyle}"
StaysOpen="False"
VerticalAlignment="Bottom"
IsOpen="False"
PlacementTarget="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ToggleButton, AncestorLevel=1}}" />
</Grid>
</ToggleButton>
代碼
那麼後面你一起工作。 IsOpen
爲Popup
和。 IsChecked
for ToggleButton
。 一切正常,但當您打開Popup
並點擊邊界外時,問題就會到達。 Popup
將被關閉,但ToggleButton
停留檢查。
你不能在PopupOnClosed
處理器是ToggleButton.IsChecked = false
設置,因爲當你點擊ToggleButton
關閉Popup
,在Popup
自行關閉,設置ToggleButton.IsChecked = false
但在森那一次你點擊了ToggleButton
並嘗試打開再次Popup
。所以你不能關閉它。
1 ToggleButtonClick:
-> ToggleButton IsChecked = true
第二ToggleButtonClick:
-> ToggleButton IsChecked = false
-> ToggleButton IsChecked = true
所以,如果你點擊切換按鈕,同時彈出是開放的,它閃爍但保持打開狀態。
請問您如何解決此問題?
編輯:
在MyWindow.XAML試試這個,在代碼添加依賴屬性IsDropDownOpen 後面,請:
<Grid>
<ToggleButton x:Name="PART_OpenToggleButton"
Focusable="False"
Height="20"
Width="50"
IsChecked="{Binding ElementName=TestWindow, Mode=TwoWay, Path=IsDropDownOpen}">
<Grid>
<Popup x:Name="PART_PopupControl"
Width="100"
Height="100"
StaysOpen="False"
Focusable="False"
VerticalAlignment="Bottom"
IsOpen="{Binding ElementName=TestWindow, Path=IsDropDownOpen}"
PlacementTarget="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ToggleButton, AncestorLevel=1}}">
</Popup>
</Grid>
</ToggleButton>
</Grid>
public bool IsDropDownOpen
{
get { return (bool)GetValue(IsDropDownOpenProperty); }
set { SetValue(IsDropDownOpenProperty, value); }
}
public static readonly DependencyProperty IsDropDownOpenProperty =
DependencyProperty.Register("IsDropDownOpen", typeof(bool), typeof(Window), new UIPropertyMetadata(false));
取看看:http://stackoverflow.com/questions/13687463/wpf-popup-staysopen-false-still-keep-the-popup-open-while-clicking-outside – SepehrM 2015-01-25 17:23:19