2010-06-05 9 views
26

Uczę się WPF i nie mogę dowiedzieć się, jak ustawić moje przyciski, aby miały kształt kwadratu.Dynamiczny układ WPF: jak wymusić proporcje kwadratowe (szerokość równa się wysokości)?

Tu jest mój XAML Markup:

<Window x:Class="Example" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="368" Width="333"> 
    <Window.Resources> 
    <Style x:Key="ToggleStyle" BasedOn="{StaticResource {x:Type ToggleButton}}" 
          TargetType="{x:Type RadioButton}"> 
    </Style> 
    </Window.Resources> 
    <RadioButton Style="{StaticResource ToggleStyle}"> 
     Very very long text 
    </RadioButton> 
</Window> 

Określanie jawne wartości dla Width i Height atrybutów wydaje się złym pomysłem - przycisk należy obliczyć jego wymiary na podstawie jego treści automagicznie, ale zachować jego szerokość i wysokość równą . czy to możliwe?

+0

http://stackoverflow.com/questions/288954/how-do-i-keep-aspect-ratio-on-scalable-scrollable-content-in-wpf – Mangesh

Odpowiedz

36

Spróbuj tego - wydaje się działać w Kaxaml:

<Button 
    MinWidth="{Binding ActualHeight, RelativeSource={RelativeSource Self}}" 
    MinHeight="{Binding ActualWidth, RelativeSource={RelativeSource Self}}"> 
    Some content 
</Button> 

(Aby przetestować, I umieścić TextBox wewnątrz przycisku, bo to łatwy sposób, aby zmienić rozmiar zawartości bez ponownego analizowania XAML)

Edit. przykro, prawdopodobnie powinien mieć określone i t jako styl pasujące do Twojego przykładu:

<Style TargetType="Button" x:Key="SquareButton"> 
    <Setter Property="MinWidth" Value="{Binding ActualHeight, RelativeSource={RelativeSource Self}}" /> 
    <Setter Property="MinHeight" Value="{Binding ActualWidth, RelativeSource={RelativeSource Self}}" /> 
</Style> 
+0

Jest jakikolwiek sposób zrobić to samo, ale zamiast min, dla max? –

+0

Powinieneś zadać osobne pytanie; Nie jestem pewien, co chciałbyś osiągnąć. Ten fragment wymusza na kwadracie przycisk, który otacza jego zawartość; co chciałbyś osiągnąć? –

+0

Napisałem odpowiedź: http://stackoverflow.com/questions/29620938/windows-phone-xaml-force-square-proportioned-container-aspectratio-11 –

4

Myślę, że chcesz związać szerokość przycisku do jego wysokości, tak:

<Button Name="myButton" 
Width="{Binding ElementName=myButton, Path=Height}" 
Height="100"> 
Button Text 
</Button> 
+4

Myślę, że Gart chce, aby nadal autosize do treści, co jest nieco trudniejsze do osiągnięcia. Ponadto zamiast "ElementName" można użyć 'RelativeSource = {RelativeSource Self}', który jest łatwiejszy w przenoszeniu. –

+0

@Dan Puzey, Thanks =) – n535

Powiązane problemy