我有一个简单的页面,包含一个矩形,一个椭圆,两个滑块和一个文本块。
两个滑块控制(通过绑定)矩形的高度和宽度。
我想根据矩形尺寸的最小值设置椭圆的宽度和高度。 XAML代码如下所示:
<UserControl
x:Class="App16.MyUserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App16"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="400"
d:DesignWidth="400"
x:Name="MyRoot">
<Grid Background="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="2*" />
<RowDefinition />
</Grid.RowDefinitions>
<Rectangle Name="rect" Fill="Yellow"
Width="{Binding ElementName=rectX,Path=Value}"
Height="{Binding ElementName=rectY,Path=Value}" Grid.Column="0"/>
<Ellipse Fill="Yellow"
Width="{Binding ElementName=MyRoot,Path=SampleFunction}"
Height="{Binding ElementName=MyRoot,Path=SampleFunction}" Grid.Column="1" />
<StackPanel Grid.Row="1" Grid.ColumnSpan="2">
<Slider Name="rectX" HorizontalAlignment="Stretch" Minimum="100" Maximum="200" Value="150" />
<Slider Name="rectY" HorizontalAlignment="Stretch" Minimum="100" Maximum="200" Value="150" />
<TextBlock Foreground="White" Text="{Binding ElementName=MyRoot, Path=SampleFunction}" />
</StackPanel>
</Grid>
背后的代码如下所示:
public Double SampleFunction {
get { return (rect.Width <= rect.Height ? rect.Width : rect.Height); }
}
在当前状态下,矩形根据滑块中的值正确调整大小,但在加载页面后从不调用“SampleFunction”。
当然我可以通过“RESIZED”事件做到这一点,但我想知道如果不这样做是否可行。
有什么建议吗?当用户调整滑块控件时,我希望看到矩形和椭圆的大小改变。
谢谢!
答案 0 :(得分:1)
您的SampleFunction
需要重命名(它是属性,而不是函数)。
为了使其适用于DataBinding,它需要实现INotifyPropertyChanged
此外,内部逻辑应该基于ActualWidth
和ActualHeight
。
答案 1 :(得分:1)
<Ellipse
Fill="Yellow"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Stretch="Uniform" />