2016-04-24 12 views
2

Ich habe ein Problem bei der Größenanpassung des (Text) Inhalts meiner Buttons.WPF ItemsControl stretch FontSize von ButtonContent

Dies ist der Stil meiner Tasten. Nichts besonderes, aber beachten Sie die TextWrapping Eigenschaft!

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

definiert ich eine ItemTemplate basiert auf meiner Buttons:

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

Ich bin eine Liste von Elementen in einer Items mit 3 Spalten zeigt:

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

Bis zu diesem Zeitpunkt diese ist nichts besonderes. Aber jetzt möchte ich die FontSize aller meiner Buttons maximal ausdehnen, erlaubt das Item mit dem größten Inhalt (alle Items sollten am Ende die gleiche FontSize haben).

Ich habe eine solution gefunden, um die benötigte Größe eines Textes zu berechnen. So könnte ich die maximale FontSize eines Buttons berechnen. Dafür benötige ich aber die tatsächliche Größe eines meiner Buttons (alle haben die gleiche Größe).

Ich habe nicht wirklich eine Idee, wie man die Größe bekommt und mein Problem löst. Wäre toll, wenn jemand eine Idee hat - oder eine ganz andere Herangehensweise.

Antwort

0

Sie Actual Ihren Knopf als Command verwenden können die Breite wie folgt zu erhalten:

<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> 

Ihr Befehl sollte dann so aussehen:

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

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

Ich brauche die Breite, bevor ich irgendwelche Befehle verwenden . – Fruchtzwerg

+0

Ich habe meine Antwort bearbeitet, sodass Sie den Wert für das geladene Ereignis von UserControl erhalten. – Johannes

Verwandte Themen