我有一个组件的两个不同属性,应将其用于另一个组件的Margin属性。一个用于左/刚度,另一个用于上/下。是否可以将两个变量绑定为一个变量?
根据您的情况,但需要一些转换器。
1)如果您是最简单的情况,则“简单地”将aMultiBinding
与一起使用IMultiValueConverter
:
<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)如果您有更高级的需求,可以检查我在这里建造的另一个转换器:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句