为什么不是';t我的WPF弹出菜单显示它应该在哪里
本文关键字:显示 菜单 在哪里 WPF 我的 为什么不 | 更新日期: 2023-09-27 18:23:42
我正在努力遵循本指南:http://www.jarloo.com/excel-like-autofilter-in-wpf/以在按下数据网格列标题中的按钮时添加一个小弹出窗口。我在列标题中添加了一个过滤器按钮和图标,并将弹出窗口的放置目标设置为该按钮,但弹出窗口始终显示在整个窗口的左下角。
知道为什么吗?
数据网格列
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="Images'bios.png" Width="16" Height="16"/>
<TextBlock Text="Model" TextWrapping="Wrap" Padding="3"/>
<Button Name="btnModelFilter" Margin="3,0,0,0" Click="btnModelFilter_Click">
<Button.Template>
<ControlTemplate>
<Image Source="Images'filter.png" Width="10" Height="10"/>
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
弹出
<Popup Name="popModel" Placement="Bottom" PlacementTarget="{Binding ElementName=btnModelFilter}" StaysOpen="False" Width="200">
<Border Background="White" BorderBrush="Gray" BorderThickness="1,1,1,1">
<StackPanel Margin="5,5,5,15">
<StackPanel Orientation="Horizontal" Margin="0,0,0,15">
<Button Margin="0,0,0,0" Name="btnSelectAll" Click="btnSelectAll_Click">
<Button.Template>
<ControlTemplate>
<TextBlock Text="Select All" Foreground="Blue" Cursor="Hand" />
</ControlTemplate>
</Button.Template>
</Button>
<Button Margin="10,0,0,0" Name="btnUnselectAll" Click="btnUnselectAll_Click">
<Button.Template>
<ControlTemplate>
<TextBlock Text="Select None" Foreground="Blue" Cursor="Hand" />
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
<ListBox x:Name="lstModels" BorderThickness="0">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked}" Content="{Binding Item}" Checked="ApplyFilters" Unchecked="ApplyFilters" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</Border>
</Popup>
由于按钮的Name属性是在DataTemplate中定义的,因此名称的范围不会超出该DataTemplate,因此找不到按钮,PopUp显示为0,0。
这个作用域规则是合乎逻辑的,因为想象一下,如果您多次重复使用DataTemplate,那么使用相同的按钮名称将引发编译器错误
您可以将弹出窗口定义为带有键的样式,并将其直接包含在Header DataTemplate中。
假设您的弹出窗口位于btnModelFilter
的同一堆栈面板中,我认为您的StackPanel(btnModelFilter
的父对象)应该是弹出窗口的放置目标,而而不是btnModelFilter
。