2017-04-04 28 views
0

我有一個datagrid,我想支持excel類似的過濾功能。 以下是列標題的屏幕截圖: enter image description hereWPF中的Datagrid列標題上的移位圖標

我在列標題旁邊添加了一個過濾器圖標。問題是這個圖標應該移動到列的最右側。空心圓在哪裏。用戶可以通過使用鼠標拖動來調整列的大小,因此當用戶增加或減少寬度時,圖標應該粘貼到列的右端。 下面是代碼:

<DataGridHyperlinkColumn Binding="{Binding PackageName}" MinWidth="250" IsReadOnly="True" > 
         <DataGridHyperlinkColumn.Header> 
          <StackPanel Orientation="Horizontal"> 
           <TextBlock Text="Package Name"/> 
           <Button Name="PackageNameFilter" Click="PackageNameFilter_Click" HorizontalAlignment="Right"> 
            <Button.Template> 
             <ControlTemplate> 
              <Image Source="/Resources/filter.png" Width="10" Height="10"/> 
             </ControlTemplate> 
            </Button.Template> 
           </Button> 
          </StackPanel> 
         </DataGridHyperlinkColumn.Header> 

我怎樣才能做到這一點?

回答

1

我正在寫這個動態。它會給你一個想法來解決這個問題。您可以通過使用GridDockPanel來實現此目的。下面是使用DockPanel

<DataGridHyperlinkColumn.Header> 
    <DockPanel> 
     <TextBlock Text="Package Name"/> 
     <Button DockPanel.Dock="Right" /> 
    </DockPanel> 
</DataGridHyperlinkColumn.Header> 

編輯之一:

更新基礎上的意見,你要舒展列標題的寬度佔據整個寬度由@ grek40

<DataGridTextColumn.HeaderStyle> 
    <Style TargetType="DataGridColumnHeader"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    </Style> 
</DataGridTextColumn.HeaderStyle> 
提到

希望有幫助。

+0

我試着用網格,它不工作。原因是標題名稱的寬度,即「包名稱」遠遠小於列的寬度。由於我們在DataGridHyperlinkColumn.Header內部使用了網格或dockpanel,因此它不能解決問題。 也試過與dockpanel,它仍然是一樣的。 –

+0

@TheKing我已經更新了答案。 – Gopichandar

+0

謝謝。這有幫助。 –

0

您需要確保標題內容實際上使用標題的大小。我使用類似於Gopichandar的答案和HeaderStyle定義的Dockpanel。

<DataGridHyperlinkColumn Binding="{Binding Test}" Width="*"> 
    <DataGridHyperlinkColumn.Header> 
     <DockPanel LastChildFill="False"> 
      <TextBlock Text="Header Text"/> 
      <Button DockPanel.Dock="Right" Content="Filter"/> 
     </DockPanel> 
    </DataGridHyperlinkColumn.Header> 
    <DataGridHyperlinkColumn.HeaderStyle> 
     <Style TargetType="DataGridColumnHeader"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </DataGridHyperlinkColumn.HeaderStyle> 
</DataGridHyperlinkColumn>