在代码隐藏的 DataTemplate 中查找 WPF 元素
本文关键字:查找 WPF 元素 DataTemplate 代码 隐藏 | 更新日期: 2024-10-25 03:04:14
我有一个数据模板
<Window.Resources>
<DataTemplate x:Key="BarChartItemsTemplate">
<Border Width="385" Height="50">
<Grid>
<Rectangle Name="rectangleBarChart" Fill="MediumOrchid" StrokeThickness="2" Height="40" Width="{Binding}" HorizontalAlignment="Right" VerticalAlignment="Bottom">
<Rectangle.LayoutTransform>
<ScaleTransform ScaleX="4"/>
</Rectangle.LayoutTransform>
</Rectangle>
<TextBlock Margin="14" FontWeight="Bold" HorizontalAlignment="Right" VerticalAlignment="Center" Text="{Binding}">
<TextBlock.LayoutTransform>
<TransformGroup>
<RotateTransform Angle="90"/>
<ScaleTransform ScaleX="-1" ScaleY="1"/>
</TransformGroup>
</TextBlock.LayoutTransform>
</TextBlock>
</Grid>
</Border>
</DataTemplate>
</Window.Resources>
我在表格上有一个按钮。我需要从数据模板更改矩形的比例(缩放转换)。在上述按钮的Button_Click事件中,我应该如何访问"矩形条形图"元素?
我在 WPF 程序中经常使用此函数来查找子元素:
public IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
{
if (depObj != null)
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T)
yield return (T)child;
foreach (T childOfChild in FindVisualChildren<T>(child))
yield return childOfChild;
}
}
}
用法:
foreach (var rectangle in FindVisualChildren<Rectangle>(this))
{
if (rectangle.Name == "rectangleBarChart")
{
/* Your code here */
}
}
不要这样做。如果需要更改DataTemplate
中的某些内容,请绑定相应的属性并修改基础数据。此外,我建议将Button.Command
绑定到数据/视图模型(参见 MVVM)上的ICommand
,而不是使用事件,那么您已经在正确的上下文中,视图不需要做任何事情。