2012-09-24 42 views
0

您好具有非常簡單的數據網格WPF佈局如下:爲什麼模板化的DataGridColumnHeader中出現額外的列?

<wpftk:DataGrid Grid.Row="1" 
     x:Name="myOrdersGrid" 
     ColumnHeaderStyle="{DynamicResource FilterColumnHeaderStyle}" 
     CanUserResizeColumns="True" 
     VerticalAlignment="Stretch" 
     HorizontalAlignment="Stretch"> 

    <wpftk:DataGrid.Resources> 
    <Style x:Key="FilterColumnHeaderStyle" TargetType="{x:Type Primitives:DataGridColumnHeader}"> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Primitives:DataGridColumnHeader}"> 
      <WrapPanel Width="50" Orientation="Vertical"> 
       <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" /> 
       <TextBox Text="Hello" FontSize="10" Background="OldLace" HorizontalAlignment="Center" /> 
      </WrapPanel > 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
    </wpftk:DataGrid.Resources> 

    <wpftk:DataGrid.Columns> 
    <wpftk:DataGridTextColumn SortMemberPath="Name" Binding="{Binding Name}" IsReadOnly="True"/> 
    <wpftk:DataGridTextColumn SortMemberPath="Name" Binding="{Binding Price}" IsReadOnly="True"/> 
    </wpftk:DataGrid.Columns> 
</wpftk:DataGrid> 

意圖是一個文本框拖放到每個報頭中,爲了作爲過濾器。

然而,當這種渲染,我得到一個額外的文本框,整個數據網格浮動中途,具體如下:

DataGrid with extra column

任何人都知道爲什麼嗎?我玩過各種各樣的設置等,但無法弄清楚爲什麼會發生這種情況(更別說如何修復它了)。額外的文本框似乎沒有啓用/可點擊,所以它看起來像某種禁用/ glasspaned情況。

回答

0

好的,所以我找到了問題。額外的控制似乎被放入'填充'列,數據網格自動插入最後定義的列和數據網格的RHS之間。

一個更好的辦法來做到這一點是使用的ContentTemplate頁眉控制如下:

<Style x:Key="FilterColumnHeaderStyle" TargetType="{x:Type Primitives:DataGridColumnHeader}"> 
     <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
      <WrapPanel Orientation="Vertical"> 
       <ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Stretch" /> 
       <TextBox Text="{grid:GridFilter UpdateSourceTrigger=PropertyChanged}" 
        Visibility="{Binding ElementName=FilterCheckbox, Path=IsChecked, Converter={StaticResource b2v}}" 
        FontSize="10" Width="50" Background="OldLace" HorizontalAlignment="Center" /> 
      </WrapPanel > 
      </DataTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 

這意味着自定義頁眉保留從電網正確的風格,並豎起大拇指等列入,而不必在XAML中明確聲明它們。

還是想知道DataGrid中的額外的列是否是一個錯誤,但(對於模板的目的) - 我讀這表明它的固定在.NET 4

1

AutoGenerateColumns關閉。你有兩個聲明列,加上你綁定的數據項中的任何列 - 所以如果你綁定到一個List<string>,那麼你會得到第三列(並且你已經定義了一個DataGridColumnHeader模板,它將用於第三欄也是)。

(注意:你是否編輯了發佈的代碼以刪除AutoGenerateColumns?我確定它在我第一次看的時候)。

+0

是的,我編輯的代碼刪除該文章直到我發佈後,我認爲它可能會混淆這個問題。問題不是由AutoGen'd列引起的,而是由列自動生成的。 – Webreaper

+0

不知道是誰投了票,但我很欣賞這個回答,它與這個問題無關。 :) – Webreaper

相關問題