2010-06-05 23 views
26

Tôi đang học WPF và không thể tìm ra cách để làm cho các nút của tôi có hình vuông.Bố trí động WPF: cách thực thi tỷ lệ vuông (chiều rộng bằng chiều cao)?

Đây là Markup XAML của tôi:

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

Xác định giá trị rõ ràng cho WidthHeight thuộc tính có vẻ như là một ý tưởng sai - nút nên tính toán kích thước của nó dựa trên nội dung của nó automagically, nhưng giữ chiều rộng và chiều cao bình đẳng của nó . Điều này có thể không?

+0

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

Trả lời

36

Hãy thử điều này - nó có vẻ làm việc trong Kaxaml:

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

(Để kiểm tra, tôi đặt một TextBox bên trong nút, vì đó là một cách dễ dàng để thay đổi kích thước nội dung mà không cần phân tích cú pháp Xaml.)

Chỉnh sửa: xin lỗi, có lẽ đã được chỉ định i t làm kiểu phù hợp với ví dụ của bạn:

<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

Có cách nào để làm tương tự nhưng thay vì min, cho tối đa? –

+0

Bạn nên đặt một câu hỏi riêng; Tôi không chắc bạn muốn đạt được điều gì. Đoạn mã này buộc một nút là hình vuông bao quanh nội dung của nó; bạn sẽ cố gắng đạt được điều gì? –

+0

Tôi đã viết câu trả lời: http://stackoverflow.com/questions/29620938/windows-phone-xaml-force-square-proportioned-container-aspectratio-11 –

4

Tôi nghĩ rằng bạn muốn để ràng buộc chiều rộng nút để chiều cao của nó, như thế này:

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

Tôi nghĩ Gart muốn nó vẫn tự động chuyển sang nội dung, điều này hơi khó thực hiện hơn. Ngoài ra, thay vì sử dụng 'ElementName', bạn có thể sử dụng' RelativeSource = {RelativeSource Self} ', dễ dàng di chuyển hơn. –

+0

@Dan Puzey, Thanks =) – n535

Các vấn đề liên quan