2010-06-05 2 views
26

Я изучаю WPF и не могу понять, как называть мои кнопки квадратной формой.Динамическая компоновка WPF: как применять квадратные пропорции (ширина равна высоте)?

Вот мой 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> 

Задание явных значений для Width и Height атрибутов кажется неправильной идеей - кнопка должна вычислить ее размеры на основе его содержания автомагически, но сохранить его ширину и высоту, равную , Это возможно?

+0

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

ответ

36

Попробуйте - это, кажется, работает в Kaxaml:

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

(Для того, чтобы проверить, я положил TextBox внутри кнопки, потому что это простой способ изменить размер содержимого без повторного анализа Xaml.)

Редактировать: Извините, вероятно, должно было быть указано i т как стиль, чтобы соответствовать вашему примеру:

<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

Есть ли способ сделать то же самое, но вместо min, для max? –

+0

Вы должны задать отдельный вопрос; Я не уверен, чего вы пытаетесь достичь. Этот фрагмент заставляет кнопку быть квадратной, которая окружает ее содержимое; чего бы вы пытались достичь? –

+0

Я написал ответ: http://stackoverflow.com/questions/29620938/windows-phone-xaml-force-square-proportioned-container-aspectratio-11 –

4

Я думаю, что вы хотите связать ширину кнопки на ее высоте, как это:

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

Я думаю, что Гарт хочет, чтобы он по-прежнему автоматически разбирался в содержании, что немного сложно сделать. Кроме того, вместо использования 'ElementName' вы можете использовать' RelativeSource = {RelativeSource Self} ', который более легко переносится. –

+0

@Dan Puzey, Thanks =) – n535

Смежные вопросы