2012-02-07 5 views
1

데이터 가이드 열 머리글의 단추를 누를 때 작은 팝업을 추가하려면 http://www.jarloo.com/excel-like-autofilter-in-wpf/이 가이드를 따르려고합니다. 필터 버튼과 아이콘을 열 머리글에 추가하고 팝업의 배치 대상을이 버튼으로 설정했지만 팝업은 항상 전체 창의 왼쪽 하단에 표시됩니다.내 WPF 팝업이 표시되지 않는 이유는 무엇입니까

어떤 아이디어가 필요한가요? 당신의 단추의 Name 속성이 DataT 내에서 정의되어 있기 때문에

데이터 그리드 열

<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을 키가있는 스타일로 정의하고이를 Header DataTemplate에 직접 포함시킬 수 있습니다. 당신의 팝업이 btnModelFilter 같은 스택 패널에 있음을 가정

0

, 나는 당신의 StackPanel을합니다 (btnModelFilter의 부모)이 배치 팝업의 대상 및 하지 btnModelFilter해야한다고 생각합니다.

관련 문제