2014-08-19 4 views
1

Я пытаюсь создать ряд кнопок, которые будут выравниваться влево в нормальном состоянии и равномерно сжиматься, когда пространство, предоставленное контейнером, уже недостаточно для их нормального размера.Кнопки с TextTrimming в ограниченном пространстве Grid или StackPanel

Если есть достаточно мест, то StackPanel ведет себя правильный путь: enter image description here

Если не хватает мест, Сетка с колоннами звезды размером обеспечивает то, что я хочу: enter image description here

Как выполнить оба состояния с одним контейнером макета?

Мой XAML:

<Window x:Class="WpfApplication1.MainWindow" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="MainWindow" Height="350" Width="500"> 

    <Window.Resources> 
     <Style TargetType="{x:Type Button}"> 
      <Setter Property="Margin" Value="5"/> 
      <Setter Property="Padding" Value="3"/> 
      <Setter Property="VerticalAlignment" Value="Top"/> 
      <Setter Property="ContentTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <TextBlock TextTrimming="CharacterEllipsis" Text="{TemplateBinding Content}"/> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid Grid.Row="0"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Button Grid.Column="0" Content="Save As" /> 
      <Button Grid.Column="1" Content="Copy" /> 
      <Button Grid.Column="2" Content="Exit Application" /> 
     </Grid> 

     <StackPanel Grid.Row="1" Orientation="Horizontal"> 
      <Button Content="Save As" /> 
      <Button Content="Copy" /> 
      <Button Content="Exit Application" /> 
     </StackPanel> 

    </Grid> 
</Window> 

EDIT: Предположение о Novitchi (HorizontalAlignment влево для сетки) почти работы:

enter image description here

ответ

1

Вы можете попробовать горизонтально выравнивания сетки влево:

 <Grid HorizontalAlignment="Left"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 
      <Button Grid.Column="0" Content="Save As" /> 
      <Button Grid.Column="1" Content="Copy" /> 
      <Button Grid.Column="2" Content="Exit Application" /> 
     </Grid> 
+0

Спасибо, это работает почти так, как я ожидал (см. Мое редактирование). –

+0

Для этого вам придется реализовать свою настраиваемую панель. Я не думаю, что вы можете сделать это с существующими панелями. Я бы не пошел туда, хотя, по-моему, все кнопки должны иметь фиксированную ширину. –

Смежные вопросы