c# - what is xaml
Encuentre un elemento WPF dentro de DataTemplate en el código subyacente (2)
No lo hagas Si necesita cambiar algo en una DataTemplate
, vincule las propiedades respectivas y modifique los datos subyacentes. También recomendaría vincular el Button.Command
a un ICommand
en sus datos / modelo de vista (ver MVVM) en lugar de usar eventos, entonces ya está en el contexto correcto y la vista no necesita hacer nada.
Tengo una plantilla de datos
<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>
Tengo un botón en el formulario. Necesito cambiar la escala (scaleTransform) el rectángulo de la plantilla de datos. ¿Cómo se supone que debo acceder al elemento ''rectangleBarChart'' en el evento Button_Click del botón mencionado anteriormente?
Utilizo mucho esta función en mis programas WPF para encontrar elementos secundarios:
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;
}
}
}
Uso:
foreach (var rectangle in FindVisualChildren<Rectangle>(this))
{
if (rectangle.Name == "rectangleBarChart")
{
/* Your code here */
}
}