从ItemsSource同步生成的项目

时间:2011-11-14 17:18:15

标签: c# wpf itemssource

我正在寻找一种简单的方法来同步由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 :(得分:0)

限制文本的大小只需使用Padding:

处理文本溢出是一个复杂的部分。由于某种原因(罪魁祸首是 - ButtonChrome)按钮不会采用'TextBlock.TextTrimmingProperty'附加属性,但是AttachedProperty机制专门针对这样的情况设计),为您提供两个选项:

  1. 覆盖按钮的模板,查找ButtonChrome,删除它并替换为具有TextBlock的东西,将TextBlock的文本绑定到ContentControl.Content。

  2. 自行管理文字溢出。对SizeChanged事件进行同步,从事件参数中获取大小(可能在其他任何地方都不可用),获取填充并确定文本是否超出可用大小。用“..”替换它的多余部分。

  3. 道德 - 不值得做。

    我会创建统一的二次启动按钮并在它们旁边放置标签。