2015-11-13 56 views
0

我试图安装Textblock并在DataGrid单元格中有一个按钮。 Textblock包含我的文本的一部分,当我点击按钮时,显示一个对话框。我一般我的代码看起来像下面的那个在DataGrid Cell中安装一个文本框和一个按钮

<DataGridTemplateColumn Header="Message" Width="Auto" MinWidth="60"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel Orientetion="Horrizontal"> 
       <TextBlock MinWidth="200" TextTrimming="CharacterEllipsis" Text="{Binding Text}" /> 
       <Button DockPanel.Dock="Right" Width="90" Margin="1" /> 
      </StackPanel> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

我希望按钮始终在单元的较右侧,并且它的宽度需要修复。 TextBlock需要是可变的,例如当我调整窗口的大小时,所以DataGrid,TextBlock也应该拉伸。

enter image description here

的问题是,我不能做到这一点的行为/视图。每个DataGrid线路上的TextBlock都有所不同,在某些情况下,按钮不在小区的右侧。

enter image description here

我试图改变StackPanelGridDockPanel但我仍不能得到理想的结果。

使用Grid

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition MinWidth="100" Width="*" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 

    <TextBlock Grid.Column="0" TextTrimming="CharacterEllipsis" Text="{Binding Text}" /> 
    <Button Grid.Column="1" Margin="1" /> 
</Grid> 

有什么想法可以分享?

+0

你可以添加它的外观图像,它应该如何看? – Domysee

+0

@Domysee我添加了一些图片。 – Athafoud

+0

@Athafoud DockPanel或Grid应该可以工作。请发布您尝试的更改以及您看到的(新)问题。还要确保您的xaml更改反映在输出中。 –

回答

3

StackPanel并没有真正的对齐到正确的概念。它尽可能地将元素堆叠起来。你可以解决这个问题以不同的方式,但是在这种情况下,使用DockPanel代替:

<DockPanel> 
    <Button DockPanel.Dock="Right" Width="90" Margin="1" /> 
    <TextBlock MinWidth="200" TextTrimming="CharacterEllipsis" Text="{Binding Text}" />  
</DockPanel> 

注意,我搬到了TextBlockDockPanel的最后一个子元素。 DockPanel,在布置其他子元素之后,将剩余空间分配给最后一个子元素(除非您指定LastChildFill=false)。在这种情况下,我们希望TextBlock占用剩余的空间。


UPDATE:根据上述评论,除了改变面板类型到DockPanel(或Grid),则可以使用DataGridTemplateColumn.Width为固定值,而不是Auto。这将使与指定的,但用户仍然可以修改与列的列负载,如果他们想:

<DataGridTemplateColumn Header="Message" Width="60" MinWidth="60"> 
1

我会设置一个静态值的DataGridTemplateColumn.Width --IT可以渲染性能帮助。也可以在按钮上设置尺寸,所以尺寸不适合文字。

这个工作对我来说(我用可视化的目的边框):

<Window ... 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type local:Model}" 
         x:Key="VmItem"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <Border BorderBrush="Black" BorderThickness="1"> 
        <TextBlock Grid.Column="0" TextTrimming="CharacterEllipsis" Text="{Binding Original}" /> 
       </Border> 
       <Button Grid.Column="1" Margin="1" Content="{Binding Encoded}" MinWidth="90" MaxWidth="90"/> 
      </Grid> 
     </DataTemplate> 
    </Window.Resources> 
    <Grid> 
     <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTemplateColumn Header="Message" CellTemplate="{StaticResource VmItem}" Width="300" MinWidth="100"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Window> 

证明:

enter image description here

相关问题