Синхронизировать сгенерированные элементы из ItemsSource - PullRequest
0 голосов
/ 14 ноября 2011

Я ищу простой способ синхронизации размеров текста (Button Content), которые генерируются ItemsControl.

Я использую следующий код Xaml:

<ItemsControl ItemsSource="{Binding UseCases}">
 <ItemsControl.ItemsPanel>
  <ItemsPanelTemplate>
   <WrapPanel />
  </ItemsPanelTemplate>
 </ItemsControl.ItemsPanel>
 <ItemsControl.ItemTemplate>
  <DataTemplate>
   <Button Content="{Binding DisplayName}" Width="200" Height="200">
    <Button.ContentTemplate>
     <DataTemplate>
      <Viewbox>
       <ContentPresenter Content="{Binding}" />
      </Viewbox>
     </DataTemplate>
    </Button.ContentTemplate>
   </Button>
  </DataTemplate>
 </ItemsControl.ItemTemplate>
</ItemsControl>

Я хочу сделать текст на кнопках настолько большим, насколько это возможно, что уже работает.
Но так как длина текста различна, размеры текста для каждой кнопки также различны, что выглядит странно.
Есть липростой способ указать Viewbox (или любой другой способ) взять размер наименьшего текста и использовать его для каждой кнопки?

1 Ответ

0 голосов
/ 14 ноября 2011

для ограничения размера текста просто используйте Padding:

Обработка переполнения текста является сложной частью.По какой-то причине (виновник - ButtonChrome) кнопка не будет принимать присоединенное свойство 'TextBlock.TextTrimmingProperty', однако механизм AttachedProperty разработан специально для подобных случаев), оставляя вам две опции:

  1. Переопределить шаблон кнопки, найти ButtonChrome, избавиться от него и заменить чем-то, имеющим TextBlock, привязать текст этого TextBlock к ContentControl.Content.

  2. УправлениеВаш текст переполнен самостоятельно.Подпишитесь на событие SizeChanged, получите размер из аргумента события (он может быть недоступен где-либо еще), получите отступы и выясните, превышает ли текст доступный размер.Замените излишнюю часть на «..».

Мораль - не стоит делать.

Я бы создал одинаковые квадратичные кнопки запуска и поместил бы над ними метки.

...