【问题标题】:Set a property in XAML to a function将 XAML 中的属性设置为函数
【发布时间】:2012-04-12 00:31:45
【问题描述】:

我需要设置 cotrol 的属性,它依赖于其父级的另一个属性。 我试着用一个例子更好地解释我的问题。我想创建一个切换开关按钮,将“滑块”元素设置为动画。当用户控件插入应用程序窗口时,正在定义切换开关的尺寸。我希望滑块的大小比开关盒大一半。所以如果控件大 100,滑块应该是 50,或者如果大 250,滑块应该是 125。然后我需要调用一个函数或类似的东西:

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

有没有可能实现这一目标? 提前致谢 保罗

【问题讨论】:

标签: wpf wpf-controls


【解决方案1】:

是的,您需要使用转换器进行数据绑定,例如以下示例

 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();
        }
    }

希望对你有帮助

【讨论】:

    【解决方案2】:

    XAML 不支持开箱即用。你只能bind to Properties

    • 您可以编写一个转换器来进行计算(或者您可以使用 MathConverter)
    • 您可以在事件后面的代码中进行计算 处理程序
    • 如果您遵循MVVM 模式,您可以执行以下操作 ViewModel 中的计算(虽然它会引入视图 与 ViewModel 相关的概念并不总是好的......)
    • 您可以编写自己的绑定扩展

    【讨论】:

    • MathConverter 实际上非常有趣。我会尝试在将来实现更复杂的控件。此外,绑定扩展似乎确实是一个强大的解决方案,但我需要更深入地研究这个概念。感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多