2016-05-13 4 views
0

Cela fait un moment que j'essaie cela. Je suis juste coincé et je ne peux pas m'en sortir.Silverlight: Aligner les boutons de contrôle à l'intérieur de la cellule Datagrid

Il existe trois contrôles dans la cellule DataGrid.

1: un bouton hyperlien 2: Un bouton clair 3: Un bouton de recherche

Qu'est-ce que je dois faire est d'aligner la « claire » et « bouton d'ouverture » aligner à droite de la colonne. Le crochet est la colonne est redimensionnable. J'ai essayé de donner une largeur fixe au bouton de lien hypertexte, il semble bon, mais il devient désordonné lorsque la colonne est redimensionnée.

Le contenu de la cellule a le style ci-dessous.

<Style TargetType="controls:HyperlinkClear"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="controls:HyperlinkClear"> 
        <Border BorderThickness="0" Margin="2" BorderBrush="Transparent"> 
         <Border.Resources> 
          <Style x:Name="buttonStyle" 
            TargetType="Button"> 
           <Setter Property="Template"> 
            <Setter.Value> 
             <ControlTemplate TargetType="Button"> 
              <Grid Width="12" 
                Height="12"> 
               <TextBlock Margin="{TemplateBinding Margin}" Text="x"></TextBlock> 
              </Grid> 
             </ControlTemplate> 
            </Setter.Value> 
           </Setter> 
          </Style> 
         </Border.Resources> 
         <controlsToolkit:DockPanel Background="Transparent"> 
          <Button Margin="-2,0,0,0" controlsToolkit:DockPanel.Dock="Right" HorizontalAlignment="Right" x:Name="MainSearchButton" Style="{StaticResource ButtonStyle}" IsTabStop="False" 
            Visibility ="{Binding IsRemoveButtonEnabled,Converter={StaticResource BoolToVisibilityConverter},Mode=TwoWay}"> 
           <Image Source="./open.png" Height="14" Width="16" VerticalAlignment="Center"/> 
          </Button> 
          <Button controlsToolkit:DockPanel.Dock="Right" Cursor="hand" 
            Margin="3,-2,0,0" Visibility ="{Binding IsRemoveButtonEnabled,Converter={StaticResource BoolToVisibilityConverter},Mode=TwoWay}" 
            x:Name="RemoveItemButton" HorizontalAlignment="Right" 
            Style="{StaticResource buttonStyle}" IsTabStop="false"/> 

          <HyperlinkButton x:Name="HyperlinkButton" Style="{StaticResource HyperlinkButtonStyle}" Content="{TemplateBinding Content}" /> 
         </controlsToolkit:DockPanel> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Actuellement, il ressemble à ceci. DataGrid column

attendu enter image description here

+0

Swap vous DockPanel pour la grille avec la première colonne taille '' *, et les deux qui sont censés être sur le droit à 'Auto' et vous avez terminé. –

+0

J'ai essayé avec Grid et défini les définitions de colonne. C'est le même comportement. Je n'ai pas vu de différences. Ai-je raté quelque chose? – riteshmeher

Répondre

0

J'ai trouvé la solution. La solution consiste à définir l'alignement horizontal de la cellule sur "Stretch". Remplacer la méthode BindCellContent de la colonne.

public override void BindCellContent(FrameworkElement cellContent, DataGridRow row) 
{ 
var hyperlinkButton = (HyperlinkClear)cellContent; 
hyperlinkButton.HorizontalAlignment = HorizontalAlignment.Stretch; 
}