wpf - 将 Button 的比例绑定到图像
问题描述
我有一个带有图像和按钮的简单窗口。当用户调整窗口大小时,我希望按钮以完全相同的比例与图像一起调整大小。以下是我想要的所需行为的示例。狗头周围的按钮只是延伸并与图像一起平移。
我设法通过“路径”(上方为蓝色)实现了上述行为,但我没有设法通过按钮获得相同的行为。当用户单击按钮时,我想执行一些操作。
这是我用于工作“路径”senario 的 xaml 代码:
<Grid>
<Canvas x:Name="polylineCanvas" Grid.Row="1">
<Image x:Name="imgTraining"
Width="{Binding ActualWidth, ElementName=polylineCanvas, Mode=OneWay}"
Height="{Binding ActualHeight, ElementName=polylineCanvas, Mode=OneWay}"
Stretch="Uniform"
HorizontalAlignment="Left"
VerticalAlignment="Top">
</Image>
<Path Stroke="Blue" StrokeThickness="3">
<Path.Data>
<PathGeometry x:Name="polyline">
<PathGeometry.Transform>
<ScaleTransform
ScaleX="{Binding ActualWidth, ElementName=imgTraining}"
ScaleY="{Binding ActualHeight, ElementName=imgTraining}"/>
</PathGeometry.Transform>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
</Grid>
我尝试通过添加按钮而不是路径来应用相同的逻辑。在这种情况下,按钮会拉伸到窗口的大小(但不会拉伸到图像的大小):
这是我为按钮添加的 xaml 代码:
<Button x:Name="buttSelection" Opacity="0.5" Background="#FF000CFF">
<Button.LayoutTransform>
<ScaleTransform
ScaleX="{Binding ActualWidth, ElementName=imgTraining}"
ScaleY="{Binding ActualHeight, ElementName=imgTraining}"/>
</Button.LayoutTransform>
</Button>
问题:
- 如何以与图像相同的比例缩放按钮?
- 如何将此按钮的大小和位置设置为仅是图像的一部分(而不是像图像本身一样大)?
非常感谢您的支持!
PS:我对 wpf/xaml 很陌生,所以很有可能我没有按照“预期的方式”做事,或者有一个完全不同的解决方案。
解决方案
您应该将 Image 和 Button 放在一个公共的 Viewbox 中,这会自动将它们缩放在一起。通常不需要将一个元素的大小绑定到另一个元素的实际大小。这是通过使用适当的布局面板来完成的。
在 Viewbox 内部,将有一个 Grid 作为公共父级,以及一个用于定位 Button 的 Canvas。按钮模板将在 ContentPresenter 周围包含一个边框,可以选择显示按钮的内容。
<Grid>
<Viewbox>
<Grid>
<Image x:Name="imageTraining"/>
<Canvas>
<Button x:Name="buttonSelection" Width="200" Height="200"
Canvas.Left="200" Canvas.Top="200">
<Button.Template>
<ControlTemplate TargetType="Button">
<Border BorderThickness="10"
BorderBrush="Blue"
Background="Transparent">
<ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</Canvas>
</Grid>
</Viewbox>
</Grid>
推荐阅读
- jquery - 如何将父数据属性值应用于动态插入的按钮
- python - 寻找最小公倍数
- python-3.x - 使用 L1 的 KNN 预测(曼哈顿距离)
- pytorch - 改善模型的发音
- glsl - GLSL 中的最近邻插值
- kotlin-exposed - 如何使用 picocli 从属性中读取值并使用它连接 postgres
- optimization - 放宽等式和不等式线性约束
- database - 使用 Python/mysql 连接器自动导入数据库
- reactjs - 在反应js中使用外部令牌在没有登录页面的情况下进行身份验证
- git - 验证来自输入的提交哈希 (workflow_dispatch)