2012-02-07 2 views
1

Я пытаюсь следовать этому руководству: http://www.jarloo.com/excel-like-autofilter-in-wpf/, чтобы добавить небольшое всплывающее окно, когда нажата кнопка в заголовке столбца данных. Я добавил кнопку фильтра и значок в заголовок столбца и установил целевой объект размещения в качестве этой кнопки, но всплывающее окно всегда отображается в левом нижнем углу всего окна.Почему мой всплывающий экран WPF, показывающий, где это должно быть

Любая идея, почему?

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

<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 emplate, объем имени не выходит за пределы этого DataTemplate, поэтому кнопка не найдена, а PopUp отображается в 0,0.
Это правило области видимости логично, потому что представьте, если вы повторно используете DataTemplate несколько раз, тогда с тем же именем кнопки будет возникать ошибка компилятора.
Вы можете определить свой PopUp как стиль с помощью ключа и напрямую включить его в свой заголовок DataTemplate.

0

Предполагая, что ваше всплывающее окно находится в том же стеке панели вашего btnModelFilter, я думаю, что ваш StackPanel (родитель btnModelFilter) должен быть целью размещения всплывающих окон и неbtnModelFilter.

Смежные вопросы