我的解决方案是创建一个Slider
withVisibility="Collapsed"
来隐藏元素。然后,我在ValueChanged
要为其乘以该值的对象上创建了一个事件。该事件将更新隐藏的Slider Value
.
这将允许我将Value
乘以双精度的 绑定到所需的对象,例如Border
or Button
。
这是一个工作示例。
<Window x:Class="WidthExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" SizeToContent="WidthAndHeight">
<Grid Margin="10" MinWidth="500" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Ellipse Fill="#FFCD4B7A" HorizontalAlignment="Center" Grid.Row="0" VerticalAlignment="Top" Width="{Binding ElementName=mainSlider, Path=Value}" Height="{Binding ElementName=mainSlider, Path=Value}" Margin="0,0,0,10"/>
<Rectangle Fill="#FFCD6B19" HorizontalAlignment="Center" Grid.Row="1" VerticalAlignment="Top" Width="{Binding ElementName=hiddenWidthSlider, Path=Value}" Height="{Binding ElementName=hiddenHeightSlider, Path=Value}" Margin="0,0,0,10"/>
<StackPanel Grid.Row="2">
<Slider x:Name="mainSlider" Value="50" Minimum="10" Maximum="300" SmallChange="1" LargeChange="1" TickPlacement="BottomRight" TickFrequency="5" ValueChanged="mainSlider_ValueChanged" />
<Slider x:Name="hiddenWidthSlider" Value="50" Minimum="1" Maximum="1000" SmallChange="1" LargeChange="1" Visibility="Collapsed" />
<Slider x:Name="hiddenHeightSlider" Value="50" Minimum="1" Maximum="1000" SmallChange="1" LargeChange="1" Visibility="Collapsed" />
</StackPanel>
</Grid>
</Window>
CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WidthExample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void mainSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (hiddenWidthSlider != null)
{
hiddenWidthSlider.Value = mainSlider.Value * 2;
}
if (hiddenHeightSlider != null)
{
hiddenHeightSlider.Value = mainSlider.Value / 2;
}
}
}
}
在这里, TheSlider
控制圆的Width
和Height
。有两个隐藏的滑块可以控制Rectangle
. 圆的值用于作为矩形值的基础。
在这种情况下,矩形的宽度是圆的宽度的两倍和高度的一半。我不知道使用隐藏元素是否是最好的解决方案,但它是一种选择。