2012-02-07 33 views
1

私はこのガイドに従っています:http://www.jarloo.com/excel-like-autofilter-in-wpf/データグリッドの列ヘッダーのボタンが押されたときに小さなポップアップを追加しようとしています。フィルターボタンとアイコンを列見出しに追加し、このボタンとしてポップアップの配置ターゲットを設定しましたが、ポップアップは常にウィンドウ全体の左下に表示されます。WPFポップアップが表示されない理由

どのような考えがありますか?あなたのボタンのName属性がDATAT内で定義されているので

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

emplateでは、名前のスコープはそのDataTemplateを超えないため、ボタンは見つからず、PopUpは0,0で表示されます。
DataTemplateを何度も再使用した場合、同じボタン名を使用するとコンパイラエラーが発生する可能性があるため、このスコープルールは論理的です。
PopUpをキー付きのスタイルとして定義し、ヘッダーDataTemplateに直接インクルードすることができます。

0

あなたのポップアップがあなたのbtnModelFilterの同じスタックパネルにあると仮定すると、私はあなたのStackPanel(btnModelFilterの親)が配置ポップアップの対象とないbtnModelFilterされるべきだと思います。