WPF ItemsControl拉伸ButtonContent的FontSize

时间:2016-04-24 17:09:42

标签: c# wpf xaml button itemscontrol

我在自动调整按钮的(文本)内容时出现问题。

这是我按钮的风格。没什么特别的,但请注意 TextWrapping 属性!

<Style TargetType="{x:Type Button}">
  <Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="Button">
      <TextBlock Text="{TemplateBinding Content}" TextWrapping="Wrap"/>
    </Setter.Value>
  </Setter>
</Style>

我根据我的按钮定义了一个ItemTemplate:

<DataTemplate x:Key="MyItemTemplate">
  <Button Content="{Binding Content}" Command="{Binding Command}" FontWeight="Bold" FontSize="{Binding FontSize}"/>
</DataTemplate>

我正在使用带有3列的ItemsControl显示项目列表:

<ItemsControl ItemsSource="{Binding MyItems}" ItemTemplate="{StaticResource MyItemTemplate}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <UniformGrid Columns="3"/>
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
</ItemsControl>

在此之前,这没什么特别的。但现在,我希望所有按钮的FontSize尽可能地延伸到最大值,内容最大的项目允许(所有项目最终应该具有相同的FontSize)。

我找到了solution来计算文本所需的大小。所以我可以计算一个Button的最大FontSize。但是因此我需要我的一个按钮的实际尺寸(都具有相同的尺寸)。

我真的不知道如何获得尺寸并解决我的问题。如果有人有想法 - 或者是完全不同的方法,那就太好了。

1 个答案:

答案 0 :(得分:0)

您可以使用Button的ActualWidth作为CommandParameter来获得如下宽度:

<UserControl ....
.................>
<i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding Command}" CommandParameter="{Binding ActualWidth,ElementName=button}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

    <DataTemplate x:Key="MyItemTemplate">
                    <Button Content="{Binding Content}" x:Name="button"
                    Command="{Binding Command}"
                    FontWeight="Bold" FontSize="{Binding FontSize}"/>
                </DataTemplate>

你的命令应该是这样的:

        public ICommand Command => new DelegateCommand<object>(ExecuteCommand);

        private void ExecuteCommand(object obj)
        {
            double width = (double)obj;
        }