c# - 在代码隐藏的 DataTemplate 中查找 WPF 元素

标签 c# wpf xaml datatemplate bar-chart

我有一个数据模板

<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>

我在表单上有一个按钮。我需要从 dataTemplate 更改 scale(scaleTransform) 矩形。我应该如何访问上述按钮的 Button_Click 事件中的“rectangleBarChart”元素?

最佳答案

我在我的 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  */
  }
}

关于c# - 在代码隐藏的 DataTemplate 中查找 WPF 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11826272/

相关文章:

c# - MVVM 中子属性的 PropertyChanged

c# - 根据可见光谱中的位置对 System.Media.Colors 进行排序

xaml - ReSharper:此处不允许使用 'Name' 属性;在 XAML 中使用 'x:Name' 代替

wpf - WPF中如何去除窗口边框?

c# - 你如何模拟 - _context.Entry(myEntity).Property(e => e.myProperty).IsModified

c# - 更改 Internet Explorer 安全设置(初始化和脚本 activex 控件不裸...)

c# - 如何在 iOS 上将文本字段居中?

c# - OpenGL - 如何创建和绑定(bind)立方体贴图数组?

c# - 无法将 TreeViewItem 的 IsSelected 属性绑定(bind)到 ViewModel

c# - 当焦点位于 WindowsFormsHost 内时,为什么 Keyboard.FocusedElement 为空?它打破了 WPF 命令路由