2010-09-28 9 views
0

Bonjour D'abord désolé pour mon anglais. J'ai commencé récemment mon premier projet sur wpf. Je crée un DataGrid personnalisé qui a été défini par programmation (le code xaml n'existe pas). J'ai stylisé tout ce dont j'ai besoin dans mon contrôle DataGrid sauf une case à cocher que j'ai enveloppée à l'intérieur. Le problème est que dans l'autre endroit de mon application j'ai défini un style de case à cocher comment s'appliquent correctement mais je ne peux pas appliquer à l'intérieur de ma grille de données. En fait, ma grille de données ne génère pas d'erreurs de syntaxe, mais lorsque la grille de données s'exécute, les styles de cases à cocher ne s'appliquent pas. Le look de code de style comme celui-ci (son défini dans une feuille de style)Style de boîte à cocher Datagrid

... <Setter Property="DataGridCheckBoxColumn.ElementStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type CheckBox}"> 

       <Setter Property="Background" Value="Yellow"/> 
       <Setter Property="BorderBrush" Value="{DynamicResource NormalBorderBrush}"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type CheckBox}"> 


          <BulletDecorator Background="Transparent"> 
           <BulletDecorator.Bullet> 
            <Grid Width="13" Height="13"> 
             <Border x:Name="Border" Background="Pink" BorderBrush="Black" BorderThickness="1,1,1,1" CornerRadius="2,2,2,2"/> 
             <Path x:Name="CheckMark" Stroke="Green" StrokeThickness="2" SnapsToDevicePixels="False" Data="M1.5000001,1.5833334 L9.7920001,9.6666667 M1.5420001,9.6666667 L9.7083333,1.5000001" Margin="1" ClipToBounds="False" StrokeEndLineCap="Round" StrokeStartLineCap="Round"/> 
            </Grid> 
           </BulletDecorator.Bullet> 
           <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/> 
          </BulletDecorator> 

         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Setter.Value> 

    </Setter>... 

Son exactement les mêmes que s `application dans le apliccation. J'ai beaucoup lu à ce sujet mais je ne peux pas l'appliquer, j'ai aussi essayé de définir la propriété setter sur "DatagridBoundColum.ElementStyle" et aussi sur "CellStyle" mais ça ne marche pas. Une suggestion? Merci beaucoup.

Répondre

-1

Faites comme vous le feriez dans XAML:

<UserControl.Resources> 
    <DataTemplate x:Key="CheckBoxTemplate"> 
     <CheckBox Style="{StaticResource AnyResourceKeyInApplciation}"/> 
    </DataTemplate> 
</UserControl.Resources> 
<DataGrid x:Name="dataGrid" /> 
this.dataGrid.Columns.Add(new DataGridTemplateColumn 
           { 
            CellTemplate = this.Resources["CheckBoxTemplate"] as DataTemplate 
           } 
         ); 
-1

Merci pour votre réponse vorrtex.

Je ne l'ai pas appliqué exactement mais il m'a aidé à trouver la solution, cependant j'aurais aimé ne pas modifier le code VB et seulement pour modifier le tag de style xaml.

Je trouve un objet pour simplifier cette tâche. La syntaxe est la suivante:

column2.ElementStyle = Application.Current.FindResource("CheckBoxStyle") 

Il applique le style ok dans le DataGrid. Mais en réalité il se place à la bordure gauche de la cellule. Je vais essayer de trouver pourquoi.

Merci encore.

-1

Vous pouvez essayer cette

<Controls:DataGridCheckBoxColumn Header="Homme" Binding="{Binding Homme}"> 
         <Controls:DataGridCheckBoxColumn.ElementStyle> 
          <Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}"> 
           <Setter Property="Margin" Value="4,0,0,0"/> 
          </Style> 
         </Controls:DataGridCheckBoxColumn.ElementStyle> 
        </Controls:DataGridCheckBoxColumn> 
Questions connexes