2012-02-17 37 views
7

Uygulamamda kare düğmelerim var. Her düğmenin metin içeriği çalışma zamanında ayarlanır. Çoğu durumda, metin sadece bir karakter uzunluğundadır, ancak bazen daha uzundur. Metnin her zaman görünür olmasını, yani düğmenin sınırına sığacak şekilde (yazı tipi boyutunu değiştir) genişletmem gerekiyor. Nasıl yaparım?Kare bir düğme içinde metin nasıl uzatılır?

Bir Viewbox kullanmayı denedim, ancak yardımcı olmuyor.

benim XAML basitleştirilmiş versiyonu:

<Viewbox Stretch="Uniform"> 
    <Button Content="Text" 
      Width="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/> 
</Viewbox> 

Ben (her zaman uyuyor + metin yani kare düğmeleri) ne gerek elde edebilirsiniz nasıl bir fikir?

<Button> 
     <Viewbox Stretch="Fill"> 
      <TextBlock Text="Test"/> 
     </Viewbox> 
    </Button> 

Ve birden düğmeleri bu uygulamak için:

Orijinal öneri neredeyse doğruydu
+2

Herhangi nedeni [UniformGrid] (http://www.wpftutorials.com/2011/03/wpf-uniformgrid .html) işe yaramaz mı? Yazı tipiniz dinamik olarak değişmeyecek, uygun özelliği ayarladığınız bir öğeye bağlayarak bunu artırmanız gerekir. –

+0

Düğmeleri tutmak için UniformGrid'i kullanıyorum, ancak _same size_ _same_ _same__ _same_ _same değil. – agnes

cevap

6

, bu deneyin

<Style x:Key="StretchedButtonContent" TargetType="{x:Type Button}"> 
     <Setter Property="ContentTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <Viewbox Stretch="Fill"> 
         <ContentPresenter Content="{TemplateBinding Content}"/> 
        </Viewbox> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Button Style="{StaticResource StretchedButtonContent}" Content="Test" /> 

ilk düşüncem bir RenderTransform ve dönüştürücü kullanmaktı. Bu aynı sonucu verir ama daha karmaşıktır:

<Converters:ScaleConverter x:Key="ScaleConverter" /> 

    <Button> 
     <TextBlock Text="Test" RenderTransformOrigin="0.5,0.5"> 
      <TextBlock.RenderTransform> 
       <ScaleTransform> 
        <ScaleTransform.ScaleX> 
        <MultiBinding Converter="{StaticResource ScaleConverter}"> 
         <Binding RelativeSource="{RelativeSource AncestorType={x:Type Button}}" Path="ActualWidth" /> 
         <Binding RelativeSource="{RelativeSource AncestorType={x:Type TextBlock}}" Path="ActualWidth" /> 
        </MultiBinding> 
        </ScaleTransform.ScaleX> 
        <ScaleTransform.ScaleY> 
        <MultiBinding Converter="{StaticResource ScaleConverter}"> 
         <Binding RelativeSource="{RelativeSource AncestorType={x:Type Button}}" Path="ActualHeight" /> 
         <Binding RelativeSource="{RelativeSource AncestorType={x:Type TextBlock}}" Path="ActualHeight" /> 
        </MultiBinding> 
        </ScaleTransform.ScaleY> 
       </ScaleTransform> 
      </TextBlock.RenderTransform> 
     </TextBlock> 
    </Button 

ve dönüştürücü

public class ScaleConverter : IMultiValueConverter 
{ 
    #region Implementation of IMultiValueConverter 

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     return ((double) values[0])/((double) values[1]); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
+0

Teşekkürler Phil, ilk çözüm mükemmel çalışıyor! – agnes

İlgili konular