【问题标题】:Wpf Binding two variables to MarginWpf将两个变量绑定到Margin
【发布时间】:2014-10-31 08:43:05
【问题描述】:

我有一个组件的两个不同属性,应该用于另一个组件的 Margin 属性。一个用于左/右,另一个用于上/下。是否可以将两个变量绑定为一个变量?

【问题讨论】:

    标签: wpf


    【解决方案1】:

    取决于您的情况,但需要一些转换器

    1)如果您是最简单的情况,那么“简单地”使用MultiBindingIMultiValueConverter

    <Window x:Class="MarginsBinding.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:MarginsBinding"
            Title="MainWindow" Height="350" Width="525">
        <DockPanel>
            <Slider x:Name="horizontal"
                    Maximum="1000"
                    DockPanel.Dock="Top"></Slider>
            <Slider x:Name="vertical"
                    Maximum="1000"
                    DockPanel.Dock="Top"></Slider>
            <Rectangle Fill="Red" Width="100" Height="100" VerticalAlignment="Top" HorizontalAlignment="Left">
                <Rectangle.Margin>
                    <MultiBinding>
                        <MultiBinding.Converter>
                            <local:MarginConverter></local:MarginConverter>
                        </MultiBinding.Converter>
                        <Binding ElementName="horizontal" Path="Value"></Binding>
                        <Binding ElementName="vertical" Path="Value"></Binding>
                    </MultiBinding>
                </Rectangle.Margin>
            </Rectangle>
        </DockPanel>
    </Window>
    

    还有转换器:

    using System;
    using System.Windows;
    using System.Windows.Data;
    
    namespace MarginsBinding
    {
        public class MarginConverter : IMultiValueConverter
        {
            public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                Thickness margin = new Thickness
                {
                    Left = (double)values[0],
                    Right = (double)values[0],
                    Top = (double)values[1],
                    Bottom = (double)values[1]
                };
    
                return margin;
            }
    
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    }
    

    2)如果您有更高级的需求,可以查看我在这里构建的另一个转换器:

    control margin properties depending on another control margin properties in wpf

    【讨论】:

    • 非常感谢!真的很简单。
    猜你喜欢
    • 2011-05-31
    • 2018-11-21
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多