Есть ли способ сделать простые вычисления в операторе привязки элемента xaml, кроме использования конвертера? - PullRequest
0 голосов
/ 25 марта 2010

В XAML я хочу привязать высоту одного элемента к половине высоты другого элемента. Есть ли способ сделать это, который не требует написания конвертера в коде позади?

Пример: - Что у меня есть ...

<Button Name="RemoveButton" Content="Remove Stage" Width="100" Height="{Binding  ElementName=AddButton, Path=Height, Converter={StaticResource MyHalfHeightConverter}}"/>

Что бы я хотел ...

<Button Name="RemoveButton" Content="Remove Stage" Width="100" Height="{Binding ElementName=AddButton, Path=(Height / 2.0)}"/>

1 Ответ

4 голосов
/ 25 марта 2010

Не думаю, что есть решение Binding без конвертера. Но почему бы не использовать один? Вы часто сталкиваетесь с таким требованием, поэтому имеет смысл создать некий MathConverter, который принимает некоторые свойства или параметры. Тогда вам не нужно создавать отдельный конвертер для каждого отдельного требования.

Однако, если вы действительно не хотите использовать конвертер, в зависимости от вашего макета вы можете также использовать сетку звездного размера, где AddButton распределен по двум строкам, а RemoveButton занимает только одну строку:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Button Name="AddButton" Grid.Row="0" Grid.RowSpan="2" ... />
    <Button Name="RemoveButton" Grid.Row="1" ... />

</Grid>

Если вы хотите, чтобы RemoveButton центрировался вертикально, используйте это:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="2*"/>
        <RowDefinition Height="1*"/>
    </Grid.RowDefinitions>

    <Button Name="AddButton" Grid.Row="0" Grid.RowSpan="3" ... />
    <Button Name="RemoveButton" Grid.Row="1" ... />

</Grid>

Таким образом, AddButton занимает три строки (всего 4 *), а RemoveButton находится в центральной строке (2 *).

Если невозможно добавить их в одну общую сетку, вы можете использовать Grid.IsSharedSizeScope присоединенное свойство. Подробности можно найти здесь .

...