这个问题对我来说几天令人沮丧。
我有一个DropdownButton(扩展WPF工具包),我将内容设置为Checkbox(工作正常),自定义ToggleButton,我只更改了外观和Popup,由ToggleButton打开。
<Style TargetType="{x:Type local:DropDownArrow}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Grid Background="Transparent">
<Path x:Name="ArrowPath"
Margin="3"
Fill="Transparent"
Stroke="Gray"
StrokeThickness="1"
StrokeStartLineCap="Round"
StrokeEndLineCap="Round"
Stretch="Uniform"
VerticalAlignment="Center"
HorizontalAlignment="Center">
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure StartPoint="0,0">
<LineSegment Point="0,6"/>
<LineSegment Point="5,3"/>
<LineSegment Point="0,0"/>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ArrowPath"
Property="Fill" Value="Gray"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="ArrowPath"
Property="Fill" Value="Black"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
一切都是这样的:
<HierarchicalDataTemplate >
<xctk:DropDownButton Content="{Binding Name, Mode=OneTime}">
<xctk:DropDownButton.DropDownContent>
<ItemsControl ItemsSource="{Binding Children}">
<ItemsControl.ItemTemplate>
<HierarchicalDataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0"
x:Name="FilterCheckBox"
Margin="3"
VerticalAlignment="Center"
IsChecked="{Binding IsChecked}"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.FilterCommand}"
Content="{Binding Name}"/>
<local:DropDownArrow Grid.Column="1"
x:Name="TogglePopupButton"
HorizontalAlignment="Right"
Visibility="{Binding HasSubFilters}"
IsEnabled="{Binding IsChecked, ElementName=FilterCheckBox}">
</local:DropDownArrow>
<Popup x:Name="Popup"
Placement="Right"
IsOpen="{Binding IsChecked, ElementName=TogglePopupButton, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
StaysOpen="False">
<Popup.Style>
<Style TargetType="{x:Type Popup}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Popup, Path=IsFocused}" Value="False">
<Setter Property="IsOpen" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Popup.Style>
<ListBox ItemsSource="{Binding Children}">
<ListBox.ItemTemplate>
<HierarchicalDataTemplate>
<CheckBox Content="{Binding Name}"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.FilterCommand}"
IsChecked="{Binding IsChecked}"
VerticalAlignment="Center"
Margin="3"/>
</HierarchicalDataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Popup>
</Grid>
</HierarchicalDataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</xctk:DropDownButton.DropDownContent>
</xctk:DropDownButton>
</HierarchicalDataTemplate>
它嵌套在HierarchicalDataTemplate中,因为我有几个(应该是过滤器)。
我希望当用户在其外部点击时关闭Popup,如果你打开另一个带有ToggleButton的弹出窗口,我认为它也会关闭它。
我还希望DropdownButton保持打开状态,如果你从Popup返回到仍然打开的Dropdown(如果这样做,Popup应该关闭)
这两个都没有发生,我认为我的问题与Popup没有关闭我希望它的方式取决于我所做的Binding。 我不明白为什么DropdownButton关闭,如果我在Popup中选择一些内容后切换回它。
非常感谢任何帮助。
我不确定这个问题是否是正确的方法,因为代码,但据我所知,它通常希望更好地理解它或重现问题。