2010-04-14 141 views
0
一個DataGrid標題組合框

我有一個DataGrid被定義爲這樣一個列:從數據綁定視圖模型

<Custom:DataGridTextColumn HeaderStyle="{StaticResource ComboBoxHeader}" Width="Auto" Header="Type" Binding="{Binding Path=Type}" IsReadOnly="True" /> 

的ComboBoxHeader風格是在資源字典定義爲這樣:

<Style x:Key="ComboBoxHeader" TargetType="{x:Type my:DataGridColumnHeader}"> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type my:DataGridColumnHeader}"> 
        <ControlTemplate.Resources> 
         <Storyboard x:Key="ShowFilterControl"> 
          <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="filterComboBox" Storyboard.TargetProperty="(UIElement.Visibility)"> 
           <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Visible}"/> 
           <DiscreteObjectKeyFrame KeyTime="00:00:00.5000000" Value="{x:Static Visibility.Visible}"/> 
          </ObjectAnimationUsingKeyFrames> 
          <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="filterComboBox" Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"> 
           <SplineColorKeyFrame KeyTime="00:00:00" Value="Transparent"/> 
           <SplineColorKeyFrame KeyTime="00:00:00.5000000" Value="White"/> 
          </ColorAnimationUsingKeyFrames> 
         </Storyboard> 
         <Storyboard x:Key="HideFilterControl"> 
          <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="filterComboBox" Storyboard.TargetProperty="(UIElement.Visibility)"> 
           <DiscreteObjectKeyFrame KeyTime="00:00:00.4000000" Value="{x:Static Visibility.Collapsed}"/> 
          </ObjectAnimationUsingKeyFrames> 
          <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="filterComboBox" Storyboard.TargetProperty="(UIElement.OpacityMask).(SolidColorBrush.Color)"> 
           <SplineColorKeyFrame KeyTime="00:00:00" Value="Black"/> 
           <SplineColorKeyFrame KeyTime="00:00:00.4000000" Value="#00000000"/> 
          </ColorAnimationUsingKeyFrames> 
         </Storyboard> 
        </ControlTemplate.Resources> 
         <my:DataGridHeaderBorder x:Name="dataGridHeaderBorder" Margin="0" VerticalAlignment="Top" Height="31" IsClickable="{TemplateBinding CanUserSort}" IsHovered="{TemplateBinding IsMouseOver}" IsPressed="{TemplateBinding IsPressed}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}" SortDirection="{TemplateBinding SortDirection}" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Grid.ColumnSpan="1"> 
          <Grid x:Name="grid" Width="Auto" Height="Auto" RenderTransformOrigin="0.5,0.5"> 
           <Grid.RenderTransform> 
            <TransformGroup> 
             <ScaleTransform/> 
             <SkewTransform/> 
             <RotateTransform/> 
             <TranslateTransform/> 
            </TransformGroup> 
           </Grid.RenderTransform> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/> 
           </Grid.ColumnDefinitions> 
          <ContentPresenter x:Name="contentPresenter" 
            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
            ContentStringFormat="{TemplateBinding ContentStringFormat}" 
            ContentTemplate="{TemplateBinding ContentTemplate}"> 
           <ContentPresenter.Content> 
             <MultiBinding Converter="{StaticResource headerConverter}"> 
              <MultiBinding.Bindings> 
               <Binding ElementName="filterComboBox" Path="Text" /> 
               <Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Content" /> 
              </MultiBinding.Bindings> 
             </MultiBinding> 
           </ContentPresenter.Content> 
          </ContentPresenter> 
          <ComboBox ItemsSource="{Binding Path=Types}" x:Name="filterComboBox" VerticalAlignment="Center" HorizontalAlignment="Right" MinWidth="20" Height="Auto" OpacityMask="Black" Visibility="Collapsed" Text="" Grid.Column="0" Grid.ColumnSpan="1"/> 
          </Grid> 
         </my:DataGridHeaderBorder>      
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Trigger.EnterActions> 
           <BeginStoryboard x:Name="ShowFilterControl_BeginStoryboard" Storyboard="{StaticResource ShowFilterControl}"/> 
           <StopStoryboard BeginStoryboardName="HideFilterControl_BeginShowFilterControl"/> 
          </Trigger.EnterActions> 
          <Trigger.ExitActions> 
           <BeginStoryboard x:Name="HideFilterControl_BeginShowFilterControl" Storyboard="{StaticResource HideFilterControl}"/> 
           <StopStoryboard BeginStoryboardName="ShowFilterControl_BeginStoryboard"/> 
          </Trigger.ExitActions> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    <Setter Property="Background"> 
     <Setter.Value> 
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
     <GradientStop Color="#FF0067AD" Offset="1"/> 
     <GradientStop Color="#FF003355" Offset="0.5"/> 
     <GradientStop Color="#FF78A8C9" Offset="0"/> 
     </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Foreground" Value="White"/> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
     <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
     <GradientStop Color="#D8000000" Offset="0.664"/> 
     <GradientStop Color="#7F003355" Offset="1"/> 
     </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="FontWeight" Value="Bold"/> 
    <Setter Property="BorderThickness" Value="1,1,1,0"/> 
    <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    <Setter Property="Padding" Value="5,0"/> 
    </Style> 

由於你可以看到,我試圖將組合框的ItemsSource綁定到類型,但這不起作用。該列表位於我的ViewModel中,正在應用於我的頁面,我將如何指定該資源字典中的此樣式,以便將其綁定到ViewModel中的源代碼。

回答

0

我認爲這裏的問題是ControlTemplate不會繼承控件的DataContext。您可以使用RelativeSource或StaticResource顯式設置綁定的來源。

喜歡的東西:

<ComboBox ItemsSource="{Binding Path=Types, Source={StaticResource myVM}}" ... 
相關問題