在代码隐藏的DataTemplate中find一个WPF元素

我有一个数据模板

<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。 我需要从dataTemplate改变比例(scaleTransform)矩形。 我该如何访问上述button的Button_Click事件中的“rectangleBarChart”元素?

2 Solutions collect form web for “在代码隐藏的DataTemplate中find一个WPF元素”

我在我的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更改某些内容,请绑定相应的属性并修改基础数据。 另外我会build议将Button.Command绑定到您的数据/视图模型(请参阅MVVM)上的ICommand ,而不是使用事件,那么您已经在正确的上下文中,视图不需要做任何事情。

  • WPF明星做什么(宽度=“100 *”)
  • WPF和XAML的隐藏function?
  • WP7应用程序栏图标不显示在模拟器上(但在混合工作)
  • WPF MVVM:如何closures一个窗口
  • 如何更改ContentPresenter上的FontFamily?
  • WPF绑定中的特殊符号 - “{Binding Path =。}”是什么意思?
  • 在Silverlight的XAML中格式化date/时间
  • UWP装订风格安装程序无法正常工作
  • 如何使用DataContext属性在XAML中的窗口上设置ViewModel?
  • 声明文本装饰,如下划线,样式中的删除线
  • 从XAML调用参数化的构造函数