2013-09-27 7 views
0

У меня есть приложение WPF, содержащее datagrid. Я пытаюсь добавить кнопку переключения в datarowheader с формой треугольника. Форма должна указывать вправо, а затем один раз щелкнуть мышью на строке, и стрелка должна указывать вниз.WPF Datagrid add button to datarowheader

<!-- The data grid to display orders--> 
     <DataGrid DataContext="{Binding OrderBlock}" 
        x:Name="dataGridOrders" 
        ItemsSource="{Binding Orders}" 
        Style="{StaticResource DataGridTemplate}" 
        ColumnHeaderStyle="{StaticResource DG_ColumnHeader}"      
        RowHeaderStyle="{StaticResource DG_RowHeader}" 
        RowStyle="{StaticResource DG_Row}" 
        CellStyle="{StaticResource DG_Cell}"      
        RowDetailsTemplate="{StaticResource DG_RowDetail}"      
        AutoGenerateColumns="False" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        Background="Silver" 
        RowHeaderWidth="30"      
        Margin="25,5,20,15"> 


<!-- Data Grid row header template --> 
    <Style x:Key="DG_RowHeader" TargetType="{x:Type DataGridRowHeader}"> 
     <Setter Property="Width" Value="35"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridRowHeader}"> 
        <Border x:Name="DGRH_Border" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          SnapsToDevicePixels="True"> 
         <Border.Background> 
          <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> 
           <GradientStop Offset="0" Color="LightGray"/> 
           <GradientStop Offset="1" Color="WhiteSmoke"/> 
          </LinearGradientBrush> 
         </Border.Background> 
        </Border>       
       </ControlTemplate>       
      </Setter.Value> 
     </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <DataTemplate> 
        <TextBlock Text="M"/> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+0

Что такое вопрос? – meilke

+0

Как добавить кнопку переключения в строку в datagrid – mHelpMe

+0

Wheres the button? – Shoe

ответ

1

Вы можете использовать контрольный шаблон, который имеет кнопку переключения что-то подобное для строки заголовка:

<Style x:Key="DG_RowHeader" TargetType="{x:Type DataGridRowHeader}"> 
     <Setter Property="Width" Value="35"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridRowHeader}"> 
        <ToggleButton Content="button" x:Name="btn"/> 
        <ControlTemplate.Triggers> 
         <DataTrigger Value="True"> 
          <DataTrigger.Binding> 
           <Binding ElementName="btn" Path="IsChecked"></Binding> 
          </DataTrigger.Binding> 
          <DataTrigger.Setters> 
           <Setter Property="Content" TargetName="btn" Value="-"/> 
          </DataTrigger.Setters> 
         </DataTrigger> 
         <DataTrigger Value="False"> 
          <DataTrigger.Binding> 
           <Binding ElementName="btn" Path="IsChecked"></Binding> 
          </DataTrigger.Binding> 
          <DataTrigger.Setters> 
           <Setter Property="Content" TargetName="btn" Value="+"/> 
          </DataTrigger.Setters> 
         </DataTrigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+0

Спасибо, что Ума действительно работает. Единственная небольшая проблема, с которой я столкнулся, - это установить границу, которая была первоначально в моем стиле DG_RowHeader? поскольку LinearGradientBrush теперь не применяется. – mHelpMe

+0

Кнопка «Переключить» может быть размещена внутри границы, вам нужно будет сделать фон кнопки «Переключить прозрачность», чтобы можно было увидеть border.background. Другой вариант - установить фон ToggleButton Background непосредственно с LinearGradientBrush вместо использования границы. –