Установить свойство в XAML для функции - PullRequest
4 голосов
/ 28 марта 2012

Мне нужно установить свойство cotrol, которое зависит от другого свойства его родителя.Я пытаюсь лучше объяснить мою проблему на примере.Я хочу создать кнопку тумблера, которая анимирует элемент «ползунок» в нем.Размеры тумблера определяются, когда пользовательский контроль вставляется в окно приложения.Я хочу, чтобы размер слайдера был в два раза больше, чем у переключателя.Поэтому, если элемент управления большой 100, ползунок должен быть 50, или, если большой 250, ползунок должен быть 125. Тогда мне нужен своего рода вызов функции или что-то подобное:

<UserControl>
 <Border Name="switchCase" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <Border Name="slider" Width="**Container.Width/2**" ></Border>
 </Border>
</UserControl>

Есть ликакие-либо возможности для достижения этой цели?Заранее спасибо Паоло

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Да, вам нужно связать данные с конвертером, как в следующем примере

 xmlns:conv="clr-namespace:MyConverters.Converters"
 .......
    <UserControl.Resources>
        <conv:WidthConvertercs x:Key="widthConv"></conv:WidthConvertercs>
    </UserControl.Resources>
    <Border Name="switchCase" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
        <Border Name="slider" Width="{Binding ElementName=switchCase, Path=ActualWidth, Converter={StaticResource widthConv}}" Background="DarkMagenta"></Border>
    </Border>

Ваш класс конвертера будет

[ValueConversion(typeof(double), typeof(double))]
    class WidthConvertercs : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            double withPar = (double)value;
            return withPar/2.0;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

Надеюсь, это поможет

3 голосов
/ 28 марта 2012

Из коробки это не поддерживается XAML.Вы можете привязать только к свойствам .

  • . Вы можете написать конвертер, который выполняет вычисления (или вы можете использовать MathConverter )
  • Вы можете выполнить вычисления в коде позади в обработчиках событий
  • Если вы следуете шаблону MVVM , вы можете выполнить вычисления в ViewModel (хотя это представит концепции, связанные с представлением, для ViewModelsчто не всегда хорошо ...)
  • Вы можете написать собственное расширение Binding
...