2016-05-13 13 views
0

Ich habe das schon eine Weile versucht. Ich stecke einfach fest und komme nicht durch.Silverlight: Richten Sie Schaltflächensteuerelemente innerhalb von Datagrid-Zellen aus.

In der Datagrid-Zelle gibt es drei Steuerelemente.

1: Ein Hyperlink-Knopf 2: Eine Löschtaste 3: Eine Suchtaste

Was ich tun muß, ist die „clear“ und „open-Taste“ align rechts von der Säule auszurichten. Der Haken ist, dass die Spalte veränderbar ist. Ich habe versucht, der Hyperlink-Schaltfläche eine feste Breite zu geben, es sieht gut aus, aber es wird unordentlich, wenn die Größe der Spalte geändert wird.

Der Zellinhalt hat unter Stil.

<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> 

Momentan sieht es so aus. DataGrid column

Erwartet enter image description here

+0

tauschen Sie DockPanel für Grid mit der ersten Spalte '*' Größe, und die beiden, die angeblich auf dem rechten Flügel 'Auto' eingestellt sein und du bist fertig. –

+0

Ich habe mit Grid versucht und die Spaltendefinitionen festgelegt. Es ist das gleiche Verhalten. Habe keine Unterschiede gesehen. vermisse ich etwas? – riteshmeher

Antwort

0

fand ich die Lösung. Die Lösung besteht darin, die horizontale Ausrichtung des Zelleninhalts auf "Strecken" einzustellen.

Überschreiben Sie die BindCellContent-Methode der Spalte.

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