2012-02-07 25 views
1

我想要按照本指南进行操作:http://www.jarloo.com/excel-like-autofilter-in-wpf/在按下datagrid列标题中的按钮时添加一个小的弹出窗口。我在列标题中添加了一个过滤器按钮和图标,并将弹出窗口的放置目标设置为此按钮,但弹出窗口始终显示在整个窗口的左下角。为什么不是我的WPF Popup显示它应该在哪里

任何想法的原因是什么?

DataGrid列

<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> 

回答

2

,因为你的按钮的名称属性是DataT中定义模板,名称的范围不超出该DataTemplate,因此没有找到该按钮,并且弹出窗口显示为0,0。
这个范围规则是合乎逻辑的,因为想象如果您多次重复使用DataTemplate,然后具有相同的按钮名称会引发编译器错误。
您可以将您的PopUp定义为带有键的样式,并直接将其包含在您的Header DataTemplate中。

0

假设您的弹出是你btnModelFilter的同一个堆栈面板,我觉得你的StackPanel(该btnModelFilter的母公司)应在弹出的安置目标和btnModelFilter

相关问题